Pereiti prie turinio

Informacijos ištraukimas


Rekomenduojami pranešimai

Sveiki, reikia nusimanančių žmonių patarimo.

 

Situacija: yra svetainė, svetainėje yra įrašai. Priklausomai nuo įrašo tipo, kiekvienam įrašui reikalinga skirtinga informacija, vieniem įrašam reikia gauti tam tikro vartotojo twitter'io follow'erių skaičių, kitam įraše reikia gauti kito vartotojo facebook puslapio like skaičių, trečiam reikia gauti youtube vartotojo subscriber'ių, ketvirtame instagram follow'erių skaičių ir etc.

 

Visos platformos iš kurių reikia išgauti informaciją turi savo api.

 

Klausimas: ką naudoti informacijos ištraukimui tos platformos api, curl, file_get_contents ar kažką kitą? Lyg ir logiškiausia būtų naudoti api, juk jis yra oficialus dalykas, tačiau ar neatsiras labai didelis apkrovimas naudojant 6 skirtingas api. O, juk reikia ištraukti tik vieną duomenį (skaičių)?

 

Jeigu kažkuri vieta yra neaiški, rašykite, pabandysiu paaiškinti aiškiau :)

Redagavo Pattio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Naudok curl pasiekti API ir nebus problemų.

 

Vienaip ar kitaip, teks naudoti cURL ar kita iranki, kad istraukti informacija is service provider. Taciau visvien siulyciau traukti informacija is service provider tik po to, kai uzkraus pagrindine svetaine, t.y. su Ajax (teks daryti papildoma request i serveri, kuris grazins reikiama informacija. Geriausiu atveju noretum tiesiogiai kreiptis i service provider naudojantis ajax, taciau narsykles blokuoja ajax call'us i kitus nei esamas domainas).

 

Priezastis tam: puslapio uzkrovimo greitis. Jei kreipsies i service provider per pagrindini request i tavo puslapi, mazes tavo puslapio uzkrovimo greitis, t.y., ne tik vartotojui reiks laukti kol tavo serveris grazins vietine informacija, bet dar prisides laikas, kuris trunka istraukti duomenis su cURL (jei ivyks timeout, gali trukti net keliolika sekundziu, kol vartotojui atidarys puslapi).

 

Redagavo Imago
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Vienaip ar kitaip, teks naudoti cURL ar kita iranki, kad istraukti informacija is service provider. Taciau visvien siulyciau traukti informacija is service provider tik po to, kai uzkraus pagrindine svetaine, t.y. su Ajax (teks daryti papildoma request i serveri, kuris grazins reikiama informacija. Geriausiu atveju noretum tiesiogiai kreiptis i service provider naudojantis ajax, taciau narsykles blokuoja ajax call'us i kitus nei esamas domainas).

 

Priezastis tam: puslapio uzkrovimo greitis. Jei kreipsies i service provider per pagrindini request i tavo puslapi, mazes tavo puslapio uzkrovimo greitis, t.y., ne tik vartotojui reiks laukti kol tavo serveris grazins vietine informacija, bet dar prisides laikas, kuris trunka istraukti duomenis su cURL (jei ivyks timeout, gali trukti net keliolika sekundziu, kol vartotojui atidarys puslapi).

 

Dėkui už patarimą :)

 

Edit: o jeigu svetainėje lankysis 500 žmonių vienu metu ar nebus tokio dalyko kaip peržengtas max request skaičius? Ar nebūtų protingiau, kas 10min siųsti request ir updatinti tuos field'us, tačiau čia vėl atrodo problema: jeigu yra 400 įrašų atnaujindamas field'ų informaciją vėl peržengsiu max request skaičių. Ar aš čia kažką ne taip nesuprantu?

Redagavo Pattio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėkui už patarimą :)

 

Edit: o jeigu svetainėje lankysis 500 žmonių vienu metu ar nebus tokio dalyko kaip peržengtas max request skaičius? Ar nebūtų protingiau, kas 10min siųsti request ir updatinti tuos field'us, tačiau čia vėl atrodo problema: jeigu yra 400 įrašų atnaujindamas field'ų informaciją vėl peržengsiu max request skaičių. Ar aš čia kažką ne taip nesuprantu?

 

Tai taip aišku ir reikia daryti, nėra jokios priežasties nenaudot cache'o, tikrai negalima tiesiogiai junginėtis prie API kiekvieną kart kai kas nors apsilanko puslapyje - sugaištamas bandwithas, krovimo laikas, o taip pat dar ir API užlimituos.

Redagavo Nerolat
Nuoroda į pranešimą
Dalintis kituose puslapiuose

viskas priklauso nuo informacijos, kuria istrauksi. Jei informacija kinta daznai, arba nori, kad ji visad butu tiksli - reiks tikrinti kiekviena karta. Jei yra galima paklaida - galima cache naudoti.

 

Del cache, gali ji laikyti vartotoju cookies + kada paskutini karta atnaujinta. Tokiu atveju, kaip ir niekad nenutiks situacija, kad teks atnaujinti dideli kieki informacijos vienus metu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

viskas priklauso nuo informacijos, kuria istrauksi. Jei informacija kinta daznai, arba nori, kad ji visad butu tiksli - reiks tikrinti kiekviena karta. Jei yra galima paklaida - galima cache naudoti.

 

Del cache, gali ji laikyti vartotoju cookies + kada paskutini karta atnaujinta. Tokiu atveju, kaip ir niekad nenutiks situacija, kad teks atnaujinti dideli kieki informacijos vienus metu.

 

Tiesa. Jeigu nori tiesiog parodyti žmogui like'ų skaičiu, pakanka ištraukti tuos duomenis su javascriptu, tačiau NIEKADA negalima traukti duomenų kiekvieną kartą serverio pusėje. Jeigu informacija kinta dažnai, tada ir naudoji mažesnio laiko cache'us - 1 min, 30 sec ir panašiai. Pats kolega pagalvokit - jeigu vienu metu svetainėje lankosi 100 žmonių ir kiekvieną kartą kai jie pereina į kitą puslapį iš naujo query'ina duomenis serveris - susidaro milžiniškas bandwith'o waste'as, o taip pat ir krovimo delay'us. Ar ne geriau tiesiog kas 1 min. iš serverio queryinti tuos duomenis, storinti nors ir faile ar duomenų bazėj, o tada, kai reikia parodyti žmogui, ištrauki iš to DB ir viskas? Manau pasirinkimas gana aiškus - jeigu nori duomenis traukti į serverį ir juos ten laikyti, naudok serverio pusės informacijos traukimą - file_get_contents, curl, whatever, yra daug priemonių. Su javascript gali būt problemų - jeigu API yra uždaras, t.y. turi API key, bet koks klientas galės pasiimti tavo key ir visiškai sunaudoti tavo API limitą jeigu jis toks yra, ar dar visokių dalykų pridaryt, paprasta taisyklė - neviešink API rakto. Taigi, išvadoje - aš siūlau daryt trumpo periodo (1 min, 30 sec) kešavimą serverio pusėje. Tačiau jeigu reikia paprasčiausio facebook'o like counterio, tikrai manau nesunkiai būtų galima tai padaryt iš kliento pusės ir net nereikia cachint - gal nežiūrės to pačios vietos 10 kartų/min, o vistiek ne savo bandwith'ą naudoji - kliento.

 

TL;DR; - iš naujo perskaičiau pirmą jūsų post'ą - taip, jeigu queryinat tik socialinių networkų informacija, galima tiesiog naudotis JS.

Redagavo Nerolat
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Naudok oficialų API, jis ir parašytas tam, kad patogiau gautum reikiamus duomenis. Nebent netinka tai, ką jie siūlo, tada jau reikia pačiam išsitraukinėt (kad ir su tuo pačiu curl).

 

Mano pasiūlymas toks:

kadangi žinai savo API limitą, gali paskaičiuoti, kiek dažnai gali atnaujinti informaciją (pvz turėdamas 500 leidžiamų užklausų per mėn, gauni apie 17 per dieną. Vadinasi jei imi duomenis tarkim iš 2 profilių, gausis kad gali atnaujinti info tik kas ~3 valandas). Tada pasirašyk kokį skriptą, kuris tau duomenų bazėje saugotų gautus duomenis, ir tą skriptą leisk per CRON tokiu dažniu, kokį turi suskaičiavęs. O savo svetainėje tiesiog pasiimk tuos duomenis iš duomenų bazės (net ir tą gali kešuoti).

 

P.S. visiškai nepatariu duomenų imti tiesiai su javascriptu ir ajax. Nebent kešuojant programos lygmeny, galbūt. Jei rimtą websaitą darai - daryk tik per serverį.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Okey, dėkui visiems, bendrą vaizdą susidariau.

 

Susitvarkiau su youtube, twitch, twitter bei instagram api, dabar niekaip neina sutvarkyti facebook, bandžiau ir savo ir kitų žmonių kodus, jokios naudos, bandžiau ir su acces token, bet vistiek nesigavo. P.S bandžiau ir curl, va pats papraščiausias pavydzys iš interneto, bet ir tas neveikia.

 

function fbLikeCount($id){

$json_url ='https://graph.facebook.com/'.$id.'';
$json = file_get_contents($json_url);
$json_output = json_decode($json);

if($json_output->likes){
	return $likes = $json_output->likes;
}else{
	return 0;
}
}

echo fbLikeCount('cocacola');

 

https://graph.facebook.com/cocacola?fields=likes

Redagavo Pattio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Okey, dėkui visiems, bendrą vaizdą susidariau.

 

Susitvarkiau su youtube, twitch, twitter bei instagram api, dabar niekaip neina sutvarkyti facebook, bandžiau ir savo ir kitų žmonių kodus, jokios naudos, bandžiau ir su acces token, bet vistiek nesigavo. P.S bandžiau ir curl, va pats papraščiausias pavydzys iš interneto, bet ir tas neveikia.

 

function fbLikeCount($id){

$json_url ='https://graph.facebook.com/'.$id.'';
$json = file_get_contents($json_url);
$json_output = json_decode($json);

if($json_output->likes){
	return $likes = $json_output->likes;
}else{
	return 0;
}
}

echo fbLikeCount('cocacola');

 

https://graph.facebook.com/cocacola?fields=likes

 

Sveikas, man tavo duotas kodas puikiai veikia, gal ne localhoste bandai?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveikas, man tavo duotas kodas puikiai veikia, gal ne localhoste bandai?

 

Nu joo.. Ieškojau ne ten problemos, matyt blokuojamas kažkaip nemokamo hosting'o tiekėjas ar kažkas tokio, nes pabandžius ant normalaus hostingo viskas veikė. Ačiū už pagalbą :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...