Juhtumiuuring: kasutage Tumblri 3000 piltide roomamiseks PHPQueryt
Tumblris on ilusaid pilte. Piltide otsimiseks ja allalaadimiseks saame kasutada Tumblri API-sid, kuid see nõuab tavaliselt registreerimist ja API-võtmeid. Teine võimalus on roomata HTML-i veebilehtedel ja sõeluda DOM-i (Document Object Model), mis võimaldab meil hankida piltide URL-id ja nende kirjeldused.
Seal on mugav raamatukogu, mida nimetatakse PHPQueryks. See võimaldab meil kirjutada JQuery stiilis PHP – d nii, nagu kirjutame JQuery, kasutades CSS-i valijaid. See muudab PHP võimsaks mis tahes HTML-lehtede DOM-i analüüsimisel.
phpquery
Järgmine on psudokood, mis illustreerib HTML – lehtede sõelumist ja piltide haaramist.
PHPQuery abil on DOM-i analüüsimine palju lihtsam! Klõpsake säutsumiseks
require('phpQuery.php');
require('app.php');
$ip = get_ip_address();
function grab($url, $lvl = 5) {
global $ip;
if ($lvl < = 0) {
return;
}
$doc = phpQuery::newDocumentFile($url);
foreach(pq('div.TumbPostPane') as $p) {
$img = pq($p)->find('img.PhotoPostMainPhoto')->attr('src');
$desc = htmlspecialchars(trim(pq($p)->find('div.MetaPanel')->html()));
$url = pq($p)->find('a')->attr('href');
$err = '';
if (UploadPic($img, $desc, $err, $ip)) { // find pictures and save locally
echo "OK = $err n";
} else {
echo str_replace("<br />", "n", "Error = $err n");
}
grab($url, $lvl - 1); // recursive download
}
}
grab("<a class="vglnk" target="_blank" href="https://uploadbeta.com" rel="nofollow"><span>https</span><span>://</span><span>uploadbeta</span><span>.</span><span>com</span></a>", 1);
Väheste muudatustega saate lasta skriptil mõne minuti jooksul indekseerida mitu tuhat pilti. Kõik pildid salvestatakse VPS-serveri kohalikesse andmebaasidesse. Pilte saab näha aadressil: uploadbeta.com
Parem on määrata lehel roomamise vahele ajavahemik, vastasel juhul võib IP-aadress olla blokeeritud.
Pildi indekseerimine
PS, piltide üleslaadimise veebisait toetab mõningaid API-sid erinevatel eesmärkidel, mille puhul kehtivad õiglase kasutamise eeskirjad: https://uploadbeta.com/picture-gallery/faq.php#api
