Tapaustutkimus: käytä PHPQueryä indeksoimaan 3000 Tumblr-kuvia
Tumblrissa on hyviä kuvia. Voimme käyttää Tumblr-sovellusliittymiä kuvien etsimiseen ja lataamiseen, mutta tämä vaatii yleensä rekisteröinnin ja API-avaimia. Toinen tapa on indeksoida HTML-verkkosivut ja jäsentää DOM (Document Object Model), jonka avulla voimme hakea kuvien URL-osoitteet ja niiden kuvaukset.
On kätevä kirjasto, jota kutsutaan nimellä PHPQuery. Sen avulla voimme kirjoittaa JQuery-tyylistä PHP :tä samalla tavalla kuin kirjoitamme JQueryä käyttämällä CSS-valitsimia. Se tekee PHP:stä tehokkaan minkä tahansa HTML-sivun DOM:n analysoinnissa.
phpquery
Seuraava on psudo-koodi, joka havainnollistaa kuinka jäsentää HTML – sivuja ja napata kuvat.
PHPQueryn avulla DOM:n analysointi on paljon helpompaa! Napsauta Twiittaamaan
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);
Pienellä muutoksilla voit antaa skriptin indeksoida useita tuhansia kuvia muutamassa minuutissa. Kaikki kuvat tallennetaan paikallisiin tietokantoihin VPS – palvelimella. Kuvat ovat nähtävissä osoitteessa: uploadbeta.com
On parempi asettaa aikaväli sivun indeksoinnin välillä, muuten IP-osoite voi olla estetty.
Kuvan indeksointi
PS, Image Upload -sivusto tukee muutamia sovellusliittymiä eri tarkoituksiin kohtuullisen käytön periaatteiden mukaisesti: https://uploadbeta.com/picture-gallery/faq.php#api
