• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af froksen | 18.08.2010 17:19

Hente flere billeder fra Google Billedsøgning script

Programmering
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/
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer11

# 1

14 år 10 måneder siden

Permalink

Indsendt af marlar den 18. august 2010 kl. 20:49

Permalink

Må det være i PHP? Det er

Må det være i PHP? Det er ret nemt. Det er det måske også i bash, men jeg er ikke så godt inde i det.
  • Log ind eller opret dig for at tilføje kommentarer

# 2

14 år 10 måneder siden

Permalink

Indsendt af froksen den 18. august 2010 kl. 21:55

Permalink

I princippet er det sådan

I princippet er det sådan set "ligegyldigt" om det er PHP... Men umiddelbart faldt jeg over et shell script, da det er det eneste jeg sådan lige umiddelbart kendte rigtigt til... :-)
  • Log ind eller opret dig for at tilføje kommentarer

# 3

14 år 10 måneder siden

Permalink

Indsendt af marlar den 19. august 2010 kl. 09:47

Permalink

Her er et simpelt, men

Her er et simpelt, men virksomt eksempel.

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('%Image removed. $imgurl = $match[1];
$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";
}
?>
  • Log ind eller opret dig for at tilføje kommentarer

# 4

14 år 10 måneder siden

Permalink

Indsendt af froksen den 19. august 2010 kl. 16:27

Permalink

Tusind tak Marlar, virker

Tusind tak Marlar, virker helt perfekt :-D Beklager jeg først svarer nu, har ikke lige haft tid før..

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
# 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('%Image removed. $imgurl = $match[1];
$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
  • Log ind eller opret dig for at tilføje kommentarer

# 5

14 år 10 måneder siden

Permalink

Indsendt af marlar den 20. august 2010 kl. 10:45

Permalink

Hej Froksen
Godt at du kunne

Hej Froksen

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);
  • Log ind eller opret dig for at tilføje kommentarer

# 6

14 år 10 måneder siden

Permalink

Indsendt af froksen den 20. august 2010 kl. 11:35

Permalink

Hej Marlar
Super tip, takker

Hej Marlar

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
#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('%Image removed. $imgurl = $match[1];
$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";
}


}

?>
  • Log ind eller opret dig for at tilføje kommentarer

# 7

14 år 10 måneder siden

Permalink

Indsendt af marlar den 20. august 2010 kl. 13:02

Permalink

Du kan lige så godt få et

Du kan lige så godt få et tip mere :-)

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('%Image removed. $imgurl = $match[1];
$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";
}
}
?>
  • Log ind eller opret dig for at tilføje kommentarer

# 8

14 år 5 måneder siden

Permalink

Indsendt af froksen den 10. januar 2011 kl. 20:14

Permalink

Få det til at virke med det nye Google?

Hej alle sammen..

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
  • Log ind eller opret dig for at tilføje kommentarer

# 9

14 år 5 måneder siden

Permalink

Indsendt af sol0 den 12. januar 2011 kl. 22:03

Permalink

OT: Nogle der kender noget

OT: Nogle der kender noget lignende til dette bare gjort i bash :)?
  • Log ind eller opret dig for at tilføje kommentarer

# 10

14 år 5 måneder siden

Permalink

Indsendt af marlar den 12. januar 2011 kl. 23:34

Permalink

#8: Jeg skal se om jeg kan

#8: Jeg skal se om jeg kan få tid at kigge på det i løbet af et par dage.
  • Log ind eller opret dig for at tilføje kommentarer

# 11

14 år 5 måneder siden

Permalink

Indsendt af mrbrown79 den 13. januar 2011 kl. 17:45

Permalink

I bash...og med lynx

I bash...og med lynx (tekstbaseret browser) installeret:


#!/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 :)
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0
Linux fra begynder til professionel af O'Reilly 0

Seneste aktivitet

PCLinuxOS 24
Gode anmeldelser Zorin OS 17.3 2
"Intet realistisk alternativ" - mig i r*ven 15
Nulstilling af adgangskode 3
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
Linuxin er nu migreret til Drupal 11 13
Et Dansk alternativ til Facebook 18
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 3
Københavns og Aarhus Kommune dropper MS 9

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !