Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zaustavljanje While petlje za 4-5 sekundi

[es] :: PHP :: Zaustavljanje While petlje za 4-5 sekundi

[ Pregleda: 4538 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Jorgovan88
Jorgovan88

Član broj: 190307
Poruke: 480



+13 Profil

icon Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 09:36 - pre 140 meseci
Znaci ovako hteo bih da napravim nesto kao crawler parser za youtube videos, tacnije parser vec imam i lepo radi - povuce sve linkove sa neke youtube stranice a generalno nista vise mi i ne treba.

Ovako bi to kao trebalo da radi.

Upisem koliko video klipova hocu da ubacim - npr 1000. I onda ubacim kao neki link od klipa "pocetnu stranicu". Server povuce sve linkove sa te stranice (naravno linkove od video stranica, ne treba mi contact feedback i ostalo) - ubaci u bazu title, link, ID... Tada "pocetna stranica" postaje poslednja ubacena u bazu i povlaci se sa nje. Naravno usput ce biti dosta if petlji. Proverio bih prvo da li link sadrzi "watch?v=" da li klip moze da se embeduje, da li je adult content, da li postoji taj ID u bazi.... Sve u svemu ovo je kontam veliki proces i hteo bih da ovo radi sporo i neograniceno... Hteo bih da while ili foreach petlja radi jako jako sporo Znaci hocu da probam da "pohvatam" veliku kolicinu klipova sa youtuba.

Pozz hvala


 
Odgovor na temu

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 11:03 - pre 140 meseci
Ako sam te dobro razumeo tebi treba sleep na taktički određenim mestima u tom kodu? :)

http://php.net/manual/en/function.sleep.php

Ili nisam razumeo, a tebi treba nešto drugo..?
 
Odgovor na temu

Jorgovan88
Jorgovan88

Član broj: 190307
Poruke: 480



+13 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 12:06 - pre 140 meseci
Mislim da je to to. Nadam se da ce raditi unutar while ili foreach petlje

Code:
<?php

// current time
echo date('h:i:s') . "\n";

// sleep for 10 seconds
sleep(10);

// wake up !
echo date('h:i:s') . "\n";

?>



Probacu kad dodjem sa posla
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 13:53 - pre 140 meseci
Nema nikakvog smisla da "pauziraš" petlju jer dok je zaustavljen niti možeš da vidiš rezultat niti možeš da čitaš neke nove podatke.

Ili nisi sve objasnio i imaš više od jedne stranice (procesa) koje "rade paralelno" pa želiš da ih uskladiš ili ti ne razumeš problem. U oba slučaja si na pogrešnom putu.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 13:58 - pre 140 meseci
Sve to gore što je navedeno plus možemo da uzmemo u obzir da ako je u priči i output buffering, sleep nema svrhu, jednostavno ne radi.
Umesto željenog efekta, dobija se omraženi (page loading) animirani gif u pretraživaču i trajaće dokle traje i vreme za spavanje. That sucks dakle, 101%.

Ako hoćeš da malo "abs-uješ" ili usporiš ili odmoriš parsera između nekog malo zahtevnijeg procesa, koristi
Code (php):

usleep();
 

jednom.
Negde između.

To što ti hoćeš bi ja rešavao/nadomestio nekako javaskriptom.
jQuery, npr.
about:networking
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 14:23 - pre 140 meseci
Možda je najbolje rešenje konstantno osvežavanje stranice dok se ne obrade svi podaci.

Posle svakog osvežavanja petlja nastavlja proces gde je stala. Možeš i fino da podešavaš broj procesa koji će se obraditi pre osvežavanja stranice. Takođe, posle svakog osvežavanja stranice možeš ispisati report o obrađenim podacima dok se sledeći obrađuju.

Inače, ne mora cela stranica da se osvežava, već možeš namestiti u okviru iframe-a ili određenog div-a.
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 18:09 - pre 140 meseci
Nema tu nikakvog bespotrebnog page loadinga jer on pravi crawler. Nije mu bitan ispis na monitoru vec upis u bazu.
Skriptu moze da pokrece iz komandne linije.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
77.243.22.*



+303 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 19:09 - pre 140 meseci
Posto je naglasio da hoce da mu skripta radi sto sporije, a ne da vidi ispis, verovatno hoce da izbegne ban sa servera zbog velikog broja zahteva...
 
Odgovor na temu

Jorgovan88
Jorgovan88

Član broj: 190307
Poruke: 480



+13 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 22:12 - pre 140 meseci
VladaSu i Milos911 su pogodili ono sto mi treba. Znaci ceo kod uopste nema echo tj nista se ne pojavljuje na stranici - treba samo da radi kao proces i u principu treba da upadne u "beskonacno petlju" a da ne zakuca server. Zato i treba da se uspori - ako je to uopste moguce.

Mada imam drugi problem. tj problem sa parserom. Na jednom drugom serveru sam koristio ovaj parser

Code:
http://simplehtmldom.sourceforge.net/


Uzeo sam bas ovaj da koristim zato sto mislim da je najjednostavniji za rad tj za izvlacenje linkova sa stranice i radi bez ikakvih problema dok na ovom mom serveru nece da radi. Izbacuje mi ovu gresku

Citat:
PHP Fatal error: Call to undefined function mb_detect_encoding() in /home/user/public_html/simple_html_dom.php on line 988


Na starom serveru tu gresku ne dobijam. Uploudovao sam fajl da mozete da pogledate o cemu se radi

EDIT. Moguce da nesto nije u redu sa podesavanjem servera jer dobijem HTTP Error 500 (Internal Server Error):


Prikačeni fajlovi
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 22:37 - pre 140 meseci
Nije poenta ispis podataka, to je navedeno kao primer (za debug-ovanje), već funkcionalnost prilikom obradjivanja podataka, a da se server ne opterećuje previše. Zato je jedno logično rešenje osvežavanje stranice. Ako hoćeš da ti skripta radi sporije u "beskonačnoj" petlji ovo je neko optimalno rešenje.

Citat:
VladaSu: Nema tu nikakvog bespotrebnog page loadinga jer on pravi crawler. Nije mu bitan ispis na monitoru vec upis u bazu.
Skriptu moze da pokrece iz komandne linije.
Nidje veze. :)

Ovo što je napisao Goran i plus_minus po meni jedino ima smisla.
Zato mislim da si definitivno na pogrešnom putu. Pogledaj kako radi npr. mysql Dumper i na sličan način možeš uraditi parser a da ne opterećuješ previše server. Sve ostalo je pod rizikom (zakucavanje servera, preterano zauzimanje resursa ...). U svakom slučaju probaj kako misliš da je najbolje, ali posle nemoj da u nas uperiš prst kada ti banuju account (ne znači da hoće, ali veći je rizik). :)

Postoji velika razlika kada pokreneš jedan veliki proces (beskonačna petlja) i slanje zahteva korak po korak.
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

Jorgovan88
Jorgovan88

Član broj: 190307
Poruke: 480



+13 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 22:47 - pre 140 meseci
Citat:
Zato je jedno logično rešenje osvežavanje stranice.


Meni ovaj deo uopste nije jasan. Da li to znaci da ja treba da osvezavam, u svom browseru, stranicu koja nema nista od sadrzaja? :)

Zar ne bih mogao celu stvar da pokrenem kao "cron job koji se nikad ne zavrsava" tj radi polako a nikad ne stigne do kraja....
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 22:53 - pre 140 meseci
Citat:
Jorgovan88Zar ne bih mogao celu stvar da pokrenem kao "cron job koji se nikad ne zavrsava" tj radi polako a nikad ne stigne do kraja....
CronJob možeš podeisiti da startuje određenu skriptu ili proces u određeno vreme (ili konstantno na npr. 30 sec.). Ako ti tako odgovara, što da ne. To je dobro rešenje.

Za ono što si ranije spomenuo (beskonačna petlja sa pauzama) mislim da je mnogo bolja solucija napraviti neki servis (npr deamon kao pozadinski proces) .
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
77.243.22.*



+303 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 23:08 - pre 140 meseci
Citat:
Jorgovan88: Meni ovaj deo uopste nije jasan. Da li to znaci da ja treba da osvezavam, u svom browseru, stranicu koja nema nista od sadrzaja? :)

Zar ne bih mogao celu stvar da pokrenem kao "cron job koji se nikad ne zavrsava" tj radi polako a nikad ne stigne do kraja....

Poenta je u ovom...
Citat:
ivan.a: Sve ostalo je pod rizikom (zakucavanje servera, preterano zauzimanje resursa ...). U svakom slučaju probaj kako misliš da je najbolje, ali posle nemoj da u nas uperiš prst kada ti banuju account (ne znači da hoće, ali veći je rizik). :)

Postoji velika razlika kada pokreneš jedan veliki proces (beskonačna petlja) i slanje zahteva korak po korak.


Php nije bas predvidjen da vrti jedan proces "beskonacno", i vremenom taj jedan proces moze da zauzme preveliku kolicinu memorije, ili nesto slicno... Zato je poenta da pozivas tu skriptu vise puta, i prilikom svakog puta uradis deo posla koji je potreban...
 
Odgovor na temu

Jorgovan88
Jorgovan88

Član broj: 190307
Poruke: 480



+13 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi03.09.2012. u 23:52 - pre 140 meseci
Evo namestio sam ovo

Code:
<?PHP
function create_slug($string){
   $slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
   return $slug;
}
include("db.php");
$x = 0;
$y = 2;
while ($x <= $y) {
$query = "SELECT * FROM video WHERE 1 ORDER BY RAND() LIMIT 1"; 
$result = mysql_query ($query);
$row = mysql_fetch_array ($result);

$url = "http://www.youtube.com/watch?v=".$row['ytid'];

  $input = @file_get_contents($url) or die("Could not access file: $url");
  $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
  if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
    foreach($matches as $match) {
$pos = strpos($match[2], "/watch?v=");
if ($pos !== false) {
$yt = $match[2];

if (strpos($yt,'&') !== false) {
$yt = explode("&", $yt);
$yt = $yt[0];
}
$yt = explode("v=", $yt);
$ytid = $yt[1];
$result = mysql_query("SELECT * FROM videos WHERE ytid = '$ytid'");
$number_of_rows = mysql_num_rows($result);

if ($number_of_rows == 0)
{


 $url = "http://gdata.youtube.com/feeds/api/videos/". $ytid;
    $doc = new DOMDocument;
    $doc->load($url);
    $title = $doc->getElementsByTagName("title")->item(0)->nodeValue;

$seo = ereg_replace("[^A-Za-z0-9]", " ", $title);
$seo = create_slug($seo);
$seo = strtolower($seo);

$userc = "videostashbot";
mysql_query("INSERT INTO video (user, ytid, title, seo) VALUES ('$userc', '$ytid', '$title', '$seo')");    
sleep(5);
}
}
}
}
sleep(10);
}
?>


Ovaj kod radi bez problema samo sad ne znam kako da ubijem ovaj fajl. Valjda treba samo da izadjem. U principu vrti mi se u Chromu kao da ce nesto da ocita ustvari radi. Vidim u bazi da mi upisuje stvari. E sad jedino sto bi mi ovde trebalo jeste - kako da proverim da li je neki video zabranjen za mladje od 18?
Takvi klipovi mi ne trebaju.

Tacnije u jednom momentu dobijem
504 Gateway Time-out nginx I jos jedno pitanje kako sad ovo da zaustavim :)

 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi04.09.2012. u 00:13 - pre 140 meseci
Citat:
E sad jedino sto bi mi ovde trebalo jeste - kako da proverim da li je neki video zabranjen za mladje od 18?
Takvi klipovi mi ne trebaju.
Mislim da ne postoji mogućnost da to proveriš. Možda jedino možeš da proveriš da li je potrebno da korisnik bude prijavljen da bi gledao video (skripta jednostavno neće da "pokupi" podatke sa tog linka).

Što se tiče tvog koda zameni ereg_replace() funkciju sa preg_replace() - (poželjno je jer je ereg_replace deprecated) . Takođe, da bi još više rasteretio server nemoj ubacivati podatke u petlji, već batch metodom - pripremi upit (INSERT) pa ga izvrši van petlje.

Takođe, da bi izbegao bagove i eventualne "failove insert-a" napravi novo polje u tabeli sa linkovima...npr. neka se zove "updated".
Kada je link obrađen, ažuriraj polje na 1. Kada ponovo startuješ skriptu selektuješ sve neobrađene podatke (WHERE `updated `= 0)...
Na ovaj način možeš da kontrolišeš obrađene i neobrađene podatke.

I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

Jorgovan88
Jorgovan88

Član broj: 190307
Poruke: 480



+13 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi04.09.2012. u 00:50 - pre 140 meseci
Citat:
Možda jedino možeš da proveriš da li je potrebno da korisnik bude prijavljen da bi gledao video


To je to sto mi treba. Napravicu drugacije petlju tj uslov. Npr neka provrti 20-tak puta.

Malopre sam morao da reboot server da bih stao. Inace svidja mi se kako radi. Nisam napravio overload i nisam zakucao server.

EDIT

Probao sam da pustim skriptu bez "zaustavljanja" ali da provrti 20 puta. Za tih 20 puta ubaci se oko 150-200 klipova. E sad problem nastaje jer ponekad skripta "zaboravi" da ubaci $title - verovatno zato sto ne moze moj server napraviti toliko upita youtube-u da bi dosao do naziva klipa. Takodje imam problema jer skripta pokupi neke arapske ili ruske klipove pa usled drugacijeg tipa slova "omasim" charset pa ne dobijem nikakav title u linku tj u kodu promenljiva $seo je " " prazno.

Moram namestiti jos ovako nesto. Treba mi if petlja koja ce proveriti da li neki klip sadrzi samo "normalna slova" - Ako sadrzi jos nesto u smislu cirilica onda mi takav klip ne treba.

[Ovu poruku je menjao Jorgovan88 dana 04.09.2012. u 15:04 GMT+1]
 
Odgovor na temu

Nemanja_666
Nemanja Tatic
Gradiska

Član broj: 116292
Poruke: 221
*.teol.net.



+19 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi04.09.2012. u 14:20 - pre 140 meseci
Ja sam koristio System Daemon (http://pear.php.net/package/System_Daemon/) za nesto slicno. Vjerovatno ces morati prekompajlirati PHP da ukljucis ovu extenziju. Moj demon u PHP-u vrti se vec preko mjesec dana bez da je i jednom pao.


Takodje zasto ne koristis youtube api za dobijanje podataka o videu? Manji load po stranici, ali je takodje manje linkova koje mozes izvuci (samo related videos).


Komad moga koda.
Code:

        $feedUrl = "http://gdata.youtube.com/feeds/api/videos/" . $q["v"];
        $xml = simplexml_load_file($feedUrl);
        if (!$xml) {
            return false;
        }
        $media = $xml->children("http://search.yahoo.com/mrss/");
        $videoTitle = $media->group->title;
        $yt = $media->children('http://gdata.youtube.com/schemas/2007');
        $attrs = $yt->duration->attributes();
        $videoDuration = sprintf( "%02.2d:%02.2d", floor( $attrs["seconds"] / 60 ), $attrs["seconds"] % 60 );
        $videoImages = array();
        for ($i = 0; $i < 4; $i++) {
            $attrs = $media->group->thumbnail[$i]->attributes();
            $path = CACHE_DIR . "/temp/" . SLOT . "_" . $i . ".jpg";
            file_put_contents($path, file_get_contents($attrs["url"]));
            $videoImages[] = $path;
        }
        $image = new Imagick($videoImages[0]);
        $image->scaleimage(Cache::IMAGE_WIDTH_LARGE, Cache::IMAGE_HEIGHT_LARGE);
 
Odgovor na temu

Jorgovan88
Jorgovan88

Član broj: 190307
Poruke: 480



+13 Profil

icon Re: Zaustavljanje While petlje za 4-5 sekundi04.09.2012. u 19:53 - pre 140 meseci
Da li bi mogao neko da mi kaze kako da proverim da li je youtube klip 18+ tj da li moram biti ulogovan da bih ga gledao ili ne????
EDIT
Sad sam provalio jednu najglupaviju stvar koji je google/youtube ikad napravio. Klip od Claudie Sampedro je oznacen kao "This video has been age-restricted based on our..." i moras da verifikujes Age da bi ga gledao. Ali ako ga ja embed kod mene onda svako moze da ga gleda :) Glupost

Posto smo svi ucestvovali u kreiranju ovog bota okacicu ovde zavrsni fajl :)

Mislim da sam uspeo

Code:

$url = "http://gdata.youtube.com/feeds/api/videos/". $ytid;
$doc = new DOMDocument;
$doc->load($url);
$title = $doc->getElementsByTagName("title")->item(0)->nodeValue;
$restrict = $doc->getElementsByTagName("yt:state")->item(0)->nodeValue;
if (is_utf8($title) != false && $restrict == "") {

echo "Sve ok i moze ubacivanje u bazu";

}


[Ovu poruku je menjao Jorgovan88 dana 04.09.2012. u 21:11 GMT+1]

[Ovu poruku je menjao Jorgovan88 dana 04.09.2012. u 21:40 GMT+1]




Ovo I dalje nije gotovo. U principu sve je namesteno sve radi samo jedna stvar ne valja i to mi pravi jako veliki problem
Ovo je kod kojim se odredjuje da li takav klip postoji u bazi....

Code:
$ytid = $yt[1];
$result = mysql_query("SELECT * FROM videos WHERE ytid = '$ytid'");
$row = mysql_fetch_array ($result);
sleep(5);
if ($row['ytid'] == "")
{...... //Posto takvog klipa tj youtube ID-a nema u bazi skripta ide dalje i ubacuje ovaj $ytid


znaci ne da mi je ovo napravilo problem nego katastrofa - sreca pa imam backup baze....
Code:
http://www.videostash.org/search.php?search=Vlado+Georgiev+-+Zivim+da+te+nadjem


Sta ovde ne valja - mora da je neka glupost. Znaci molim vas za pomoc i atachovacu bota ovde

[Ovu poruku je menjao Jorgovan88 dana 05.09.2012. u 23:03 GMT+1]

[Ovu poruku je menjao Jorgovan88 dana 05.09.2012. u 23:05 GMT+1]

[Ovu poruku je menjao Jorgovan88 dana 05.09.2012. u 23:08 GMT+1]
 
Odgovor na temu

[es] :: PHP :: Zaustavljanje While petlje za 4-5 sekundi

[ Pregleda: 4538 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.