Hente flere billeder fra Google Billedsøgning script
Hej alle sammen
Forsøger i forbindelse med et lille projekt for en af mine venner, at få lavet et script som udfra navnet på en mappe eller ligende kan hente et billede der passer til indholdet. Altså f.eks. hvis mappen hedder "openSUSE" henter den det "første" billede fra Google billedsøgning og gemmer i mappen.
But first things first... Skal have en måde hvorpå man i det hele taget kan få hentet billederne fra Google på en automatiseret måde via et script. I den forbindelse fandt jeg et gammet script "Wget Google image collector", men det virker ikke rigtigt - umiddelbart har jeg på fornemmelsen at det skyldes det "nye design" på Google, da scriptet er fra 2006. Har forsøgt en langrække forskellige ting, og prøvet selv at tilpasse meeen....
Men derfor håbede jeg på at der var nogle af jer, som kunne hjælpe mig med at få det tilpasset således at det virker endnu engang. (Eller måske har en helt anden måde at få det til at virke på?) .
I en anden forbindelse fik jeg desuden et tip fra Julemand101 om at der findes siden "Google Image Ripper", som måske kan gøre processen nemmere end at hente direkte fra Google.
Håber I har en idé om hvor jeg vil hen af og I kan hjælpe mig - ellers er det bare at spørge :-)
Henvisninger:
Wget Google image collector: http://www.krazyworks.com/wget-google-image-collector/
Google Image Ripper: http://dearcomputer.nl/gir/
Forsøger i forbindelse med et lille projekt for en af mine venner, at få lavet et script som udfra navnet på en mappe eller ligende kan hente et billede der passer til indholdet. Altså f.eks. hvis mappen hedder "openSUSE" henter den det "første" billede fra Google billedsøgning og gemmer i mappen.
But first things first... Skal have en måde hvorpå man i det hele taget kan få hentet billederne fra Google på en automatiseret måde via et script. I den forbindelse fandt jeg et gammet script "Wget Google image collector", men det virker ikke rigtigt - umiddelbart har jeg på fornemmelsen at det skyldes det "nye design" på Google, da scriptet er fra 2006. Har forsøgt en langrække forskellige ting, og prøvet selv at tilpasse meeen....
Men derfor håbede jeg på at der var nogle af jer, som kunne hjælpe mig med at få det tilpasset således at det virker endnu engang. (Eller måske har en helt anden måde at få det til at virke på?) .
I en anden forbindelse fik jeg desuden et tip fra Julemand101 om at der findes siden "Google Image Ripper", som måske kan gøre processen nemmere end at hente direkte fra Google.
Håber I har en idé om hvor jeg vil hen af og I kan hjælpe mig - ellers er det bare at spørge :-)
Henvisninger:
Wget Google image collector: http://www.krazyworks.com/wget-google-image-collector/
Google Image Ripper: http://dearcomputer.nl/gir/
Kommentarer11
Må det være i PHP? Det er
I princippet er det sådan
Her er et simpelt, men
Gem filen fx med navnet gimage.php og brug det således i terminalen:
php gimage.php
Mon ikke det kan lede dig på rette spor?
<?php
echo 'Indtast søgestreng: ';
$query = urlencode(trim(fgets(STDIN)));
$url = "http://images.google.com/images?q=$query";
echo $url,"\n";
$html = file_get_contents($url);
if (preg_match('%
$filename = basename($imgurl);
$imgdata = file_get_contents($imgurl);
file_put_contents($filename, $imgdata);
echo "Billedet '$filename' er gemt.\n";
}
else {
echo "Billedet kunne ikke gemmes";
}
?>
Tusind tak Marlar, virker
Nu må jeg se om jeg kan få resten til at virke, men igen Tusind tak :-D
Tilføjelse:
Hvis det kunne have interesse har jeg leget lidt med Marlar´s script, således at den kan håndtere flere søgekriterier på "en gang", altså f.eks. hvis man både vil have et billede af en Hund, Kat osv.
Tekst filen søgeord bestemmer hvad der skal søges efter (Kriterierne er adskildt med ny linje), et eksempel
Hund
Kat
Fisk
Gris
Her er selve hovedfilen
<?php
$imgurl = $match[1];
# Henter data fra tekst filen
$HentTitler = file_get_contents("sogeord.txt");
# Placerer hver linje i Array
$Explodetitler = explode("\n",$HentTitler);
# Erstatter hver gang variablen $query kommer med værdien i $Explodetitler
foreach ($Explodetitler as $query) {
# echo 'Indtast søgestreng: ';
# Giver tekst input
#$query = urlencode(trim(fgets(STDIN)));
$url = "http://images.google.com/images?q=$query";
echo $url,"\n";
$html = file_get_contents($url);
if (preg_match('%
$filename = basename($imgurl);
$imgdata = file_get_contents($imgurl);
file_put_contents($filename, $imgdata);
# $dir bestemmer mål for hvor I filen skal kopieres. Fjern sektion, hvis der skal gemmes i nuværrende mappe.
$dir = "./$query/$filename";
copy($filename, $dir);
unlink($filename);
echo "Billedet '$filename' er gemt.\n";
}
else {
echo "Billedet kunne ikke gemmes";
}
}
?>
Endnu engang tak Marlar
Hej Froksen
Godt at du kunne
Godt at du kunne bruge eksemplet!
En lille detalje: Du må ikke undlade urlencode() da du ellers får problemer med søgeord med specialtegn eller mellemrum fx "lille hund". Danske tegn vil måske også give problemer.
Indsæt derfor denne linje først i din forach-løkke:
$query = urlencode($query);
Hej Marlar
Super tip, takker
Super tip, takker :-D Har fixet det så det også virker - tsk tsk, lader da ligefrem at det kan gå hen og lykkes ;-)
Igen tak
<?php
$imgurl = $match[1];
#shell_exec("ls -1 | grep .zip | sed 's/\(.*\)\..*/\1/' > zipfilnavne.txt");
# Danner sogeord udfra mappenavne
shell_exec("ls -d */ > sogeord.txt");
# Henter data fra tekst filen
#$HentTitler = file_get_contents("zipfilnavne.txt");
$HentTitler = file_get_contents("sogeord.txt");
# Placerer hver linje i Array
$Explodetitler = explode("\n",$HentTitler);
#$Explodetitler_urlencode = urlencode($Explodetitler)
# Erstatter hver gang variablen $query kommer med værdien i $Explodetitler
foreach ($Explodetitler as $query) {
# echo 'Indtast søgestreng: ';
# Giver tekst input
#$query = urlencode(trim(fgets(STDIN)));
# Er nødvendig for at scriptet tilslut kan kopirer filerne til de rigtige mapper. Fjern evt. hvis denne funktion ikke skal bruges.
$mappedir = $query;
# Er nødvendigt for at kunne håndtere special tegn og mellemrum i filnavne.
$query = urlencode($query);
$url = "http://images.google.com/images?q=$query";
echo $url,"\n";
$html = file_get_contents($url);
if (preg_match('%
$filename = basename($imgurl);
$imgdata = file_get_contents($imgurl);
file_put_contents($filename, $imgdata);
# $dir bestemmer mål for stedet hvor i der skal kopieres. Fjern sektion, hvis der skal gemmes i nuværrende mappe.
$dir = "./$mappedir/$filename";
copy($filename, $dir);
unlink($filename);
echo "Billedet '$filename' er gemt i mappen $mappedir.\n";
}
else {
echo "Billedet kunne ikke gemmes";
}
}
?>
Du kan lige så godt få et
I stedet for at gå omvejen over shell_exec, kan du springe hele den første smøre over og starte direkte med:
foreach (glob('*', GLOB_ONLYDIR) as $query) {
Desuden kan du gemme direkte i den rigtige mappe i stedet for at kopiere og slette billedet:
file_put_contents("$mappedir/$filename", $imgdata);
Det samlede script bliver så noget kortere:
<?php
foreach (glob('*', GLOB_ONLYDIR) as $query) {
# Er nødvendig for at scriptet tilslut kan kopirer filerne til de rigtige mapper. Fjern evt. hvis denne funktion ikke skal bruges.
$mappedir = $query;
# Er nødvendigt for at kunne håndtere special tegn og mellemrum i filnavne.
$query = urlencode($query);
$url = "http://images.google.com/images?q=$query";
$html = file_get_contents($url);
if (preg_match('%
$filename = basename($imgurl);
$imgdata = file_get_contents($imgurl);
file_put_contents("$mappedir/$filename", $imgdata);
echo "Billedet '$filename' er gemt i mappen $mappedir.\n";
}
else {
echo "Billedet kunne ikke gemmes";
}
}
?>
Få det til at virke med det nye Google?
Er der nogen der kan få dette script til at virke med det nye Google image search? Har googlet lidt, og forsøgt lidt selv, men kan bare ikke få det til at virke... :-S
OT: Nogle der kender noget
#8: Jeg skal se om jeg kan
I bash...og med lynx
#!/bin/bash
for searchterm in $(cat searchterms.txt)
do
mkdir -p "searchresults/$searchterm"
cd searchresults/$searchterm
lynx -listonly -force_html -dump -image_links -accept_all_cookies "http://www.google.dk/images?q=$searchterm&hl=da&biw=1523&bih=742" | grep -m 1 -i http://www.google.dk/imgres | sed 's/.*imgurl=\(.\+\)&imgrefurl.*/\"\1\"/' | xargs wget
cd ../..
done
Og så en fil ved siden af, der hedder searchterms.txt med linjeseparerede søgetermer:
hund
kat
slange
Det går sikkert galt, hvis søgetermerne indeholder eksotiske tegn (og sikkert også mellemrum), men mon ikke du kan finpolere det selv :)