-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscrom.sh
executable file
·248 lines (180 loc) · 6.27 KB
/
scrom.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
#!/bin/bash
BDD_NOM='scrom.db'
DIR_DAT='links'
NC='\033[0m'
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
PURPLE='\033[0;35m'
# -----------------------------------------
# creation des tables de la base de données
# -----------------------------------------
function create_tables() {
# vérifier si la base de données existe
if [ ! -f $BDD_NOM ]; then
echo -e "${RED}database not found, create $BDD_NOM${NC}"
# créer la base de données
sqlite3 $BDD_NOM < /dev/null
echo "create tables : systemes, pages, jeux"
# créer la table systemes
sqlite3 -batch $BDD_NOM "create table systemes (\
id INTEGER PRIMARY KEY,\
identifiant TEXT,\
machine TEXT,\
televerseur TEXT,\
extension TEXT,\
commentaire TEXT);" 2> /dev/null
# créer la table pages
sqlite3 -batch $BDD_NOM "create table pages (\
id INTEGER PRIMARY KEY,\
identifiant_systeme TEXT,\
lien TEXT,\
commentaire TEXT);" 2> /dev/null
# créer la table jeux
sqlite3 -batch $BDD_NOM "create table jeux (\
id INTEGER PRIMARY KEY,\
lien_page TEXT,\
lien TEXT,\
nom TEXT,\
telechargement TEXT,\
commentaire TEXT);" 2> /dev/null
fi
}
# -------------------------------------------
# vérifier si toutes les URLs sont valides
# $1 = fichier .dat
# -------------------------------------------
function check_urls() {
# toutes les URLs sont valides
local urls=0
# boucle sur toutes les URLs dans le fichier .dat
while read -r url_page; do
# vérifier si la ligne n'est pas vide
if [ -z "$url_page" ]; then
break
fi
# vérifier si l'URL est valide
if [[ $url_page =~ ^https?://.*$ ]]; then
echo -n "$url_page : "
# obtenir le statut de l'URL avec curl
status="$(curl -Is "$url_page" | head -1)"
validate=( $status )
# vérifier si l'URL est valide
if [ "${validate[-2]}" == "200" ]; then
echo -e "${GREEN}valid${NC}"
else
echo -e "${RED}not valid${NC}"
# pas valide
urls=1
fi
else
echo -e "${RED}$url_page : bad url${NC}"
# mauvaise URL
urls=1
fi
# boucle sur toutes les URLs du fichier .dat
done < <(tail -n +4 "$1")
# si au moins une URL n'est pas valide, retourne 1 sinon 0
return $urls
}
# ------------------------------------------------------------
# fonction pour ajouter des fichiers .dat à la base de données
# ------------------------------------------------------------
function files_to_database() {
# vérifier si le répertoire existe
if [ -d "$DIR_DAT" ]; then
echo -e "${YELLOW}check if all .dat files have been added to the database...${NC}"
# boucle sur tous les fichiers .dat
for file in "$DIR_DAT"/*.dat; do
# lire les 3 premières lignes, et obtenir machine, téléverseur et extension
exec 6< $file
read machine <&6
read televerseur <&6
read extension <&6
exec 6<&-
# créer l'identifiant
identifiant=$(echo $machine\_$televerseur)
echo -ne "dat file ${PURPLE}$machine - $televerseur${NC} in database : "
# datas_file = 0 n'est pas ajouté à la base de données
datas_file=0
# vérifier si le fichier .dat a été ajouté à la base de données
# obtenir tous les identifiants dans la base de données
identifiants=(`sqlite3 -batch $BDD_NOM "select identifiant from systemes"`)
# vérifier si l'identifiant est dans la base de données
for idents in "${identifiants[@]}"; do
# identifiant trouvé, data_file = 1
if [ $idents == $identifiant ]; then
datas_file=1
echo -e "${GREEN}ok${NC}"
break
fi
done
# data_file = 0, le fichier .dat n'a pas été ajouté à la base de données,
# vérifier si toutes les URLs sont valides
if [ $datas_file == 0 ]; then
echo -e "${RED}no found, checking urls :${NC}"
# obtenir le nombre de lignes dans le fichier .dat
lines=$(wc -l < "$file")
# vérifier si le fichier contient des liens
if [ "$lines" -le 3 ]; then
echo -e "${RED}no URLs found, the .dat file is not added to the database${NC}"
datas_file=1
else
# le fichier contient au moins une URL,
# vérification des URLs
if check_urls $file; then
echo -n "all urls are valid : "
else
echo -e "${RED}at least one URL is not valid, the .dat file is not added to the database${NC}"
datas_file=1
fi
fi
fi
# data_file = 0, le fichier .dat n'a pas été ajouté à la base de données
# et toutes les URL sont valides, le fichier peut être ajouté à la base de données
if [ $datas_file == 0 ]; then
echo -e "${YELLOW}searching for games...${NC}"
# boucle sur toutes les URL
tail -n +4 $file | while read url_page; do
# vérifier si la ligne url_page n'est pas vide
if [ -z "$url_page" ]; then
break
fi
# insérer dans la table pages identifiant_systeme et lien
sqlite3 -batch $BDD_NOM "\
insert into pages (identifiant_systeme,lien) \
values ('$identifiant','$url_page');" 2> /dev/null
# extraire le dernier répertoire de l'URL
echo -n "${url_page#*/*/*/*/} : "
# obtenir tous les liens de jeux avec l'extension spécifiée contenus dans la page
counter=0; while read url_jeu; do
# extraire de url_jeu le nom du jeu
[[ $url_jeu == *\'* ]] && url_jeu=$(echo $url_jeu | sed "s/'/''/g")
nom_jeu=$(basename "$url_jeu" ".$extension")
# insérer dans la table jeux lien_page, lien, nom, telechargement
sqlite3 -batch $BDD_NOM "\
insert into jeux (lien_page,lien,nom,telechargement) \
values ('$url_page','$url_jeu','$nom_jeu','-');" 2> /dev/null
# compter les jeux
let counter++
# obtenir tous les liens de jeux avec l'extension spécifiée contenus dans la page avec lynx
done < <(lynx -dump -listonly -nonumbers $url_page | grep "\.${extension}$")
echo -e "${GREEN}${counter} found${NC}"
# boucle sur toutes les URL
done
# insérer dans la table systemes identifiant, machine, televerseur, extension
sqlite3 -batch $BDD_NOM "\
insert into systemes (identifiant,machine,televerseur,extension) \
values ('$identifiant','$machine','$televerseur','$extension');" 2> /dev/null
fi
# boucle sur tous les fichiers .dat
done
fi
}
# ----
# main
# ----
# creation de la base de données et des tables
create_tables
# inserer les fichiers .dat dans la base de données
files_to_database