|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
24.3.2015, 22:48 | #1 |
Deo inventara foruma
|
Facebook like counter
Drustvo, http://rubbertracks.converse.rs/glasaj/ da li je moguce napisati neku skriptu u js koja bi mi prikazala u nekom alert boxu 15 bendova sa najvise lajkova? (pod lajkove mislim na lajkove koji se nalaze ovde npr)
|
25.3.2015, 0:23 | #2 |
Veteran
Član od: 3.5.2008.
Lokacija: Beograd
Poruke: 760
Zahvalnice: 81
Zahvaljeno 213 puta na 144 poruka
|
Re: Facebook like counter
Skripta bi morala da otvori svaki link i uzme vrednost iz elementa koji sadrži tekst u kome piše kolko ima lajkova. To otvaranje linkova zahteva učitavanje nove stranice. To neće moći samo u JavaScript-u. Ali zato imaš ovo: http://www.seleniumhq.org
Selenium ti je alat za testiranje web sajtova. Selenium IDE je plug in za Firefox. Nisam siguran koliko može da se uradi sa njim, odnosno da li može da se napiše skripta koja će da otvara svaki link i kupi lajkove. Ali imaš i Selenium WebDriver. To je Java bioblioteka koja omogućava da bukvalno otvoriš Firefox direktno iz Jave i daješ mu direktive da ode na neki sajt, nađe neki link klikne ga. Možeš da kupiš sadržaje html elemenata, ih skupljaš u nekoj listi i posle loguješ u konzoli. I naravno možeš da vratiš browser nazad (kao da je kliknuto Back). Ja sam se malo igrao sa tim. Napravio sam program koji je je otvarao svaku sobu na Elite Security-u (kojih ima dosta) i izvlačio starost najsvežijeg posta. Nisam probao, ali pretpostavlajm da možeš i da otvaraš linkove u novom tabu, da povećaš performanse. API WebDriver-a možda izgleda kao siromašan, ali najvažnije je da možeš da daješ browseru da izvrši bilo kakav javascript i izvučeš rezultat. |
Sledeći korisnik se zahvaljuje korisniku ivan90BG na korisnoj poruci: | ||
NIx Car (25.3.2015) |
25.3.2015, 12:36 | #3 |
Deo inventara foruma
|
Re: Facebook like counter
Hvala, sad samo trebam da nadjem nekako id ili klasu od tog broja, da mogu da ga izvucem
|
25.3.2015, 13:23 | #4 |
Deo inventara foruma
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
|
Re: Facebook like counter
Ma nemoj da se zamlaćuješ nekakvim 3-rd party rešenjima kad imaš na raspolaganju zvanični Facebook Graph API. Za upite možeš da koristiš čak i najobičniji Facebook REST servis. Pazi primer (copy/paste u address bar):
Kod:
http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls=http://rubbertracks.converse.rs/portfolio/89-harpun-novi-sad-srbija-42/ 1) AJAX zahtevom povučeš sadržaj stranice na http://rubbertracks.converse.rs/glasaj/ 2) Sa document.getElementsByClassName('w-portfolio-item-anchor') iskopaš sve linkove koji vode ka stranicama za glasanje (link ti je u href atributu za svaki element kolekcije) 3) Za svaki link napraviš po jedan AJAX zahtev ka Facebook REST API-ju (vidi onaj link gore, samo zameniš URL na kraju). 4) Iz svakog odziva izvučeš likes_count i url i smestiš ih u neki niz kao objekte (recimo {url: ..., likes_count: ...}). 5) Sortiraš niz i prikažeš rezultate sa najviše lajkova nakon sortiranja. Inače, ovo bi fenomenalno funkcionisalo kao Chrome ekstenzija. Posao od nekih sat vremena a maksimalan komfor (možeš da ubaciš i jQuery u ekstenziju ako te recimo mrzi da pišeš klot JS). |
25.3.2015, 20:04 | #5 |
Veteran
Član od: 3.5.2008.
Lokacija: Beograd
Poruke: 760
Zahvalnice: 81
Zahvaljeno 213 puta na 144 poruka
|
Re: Facebook like counter
Da, zaboravio sam na Facebook API (ne izvlačim se, znao sam za API od ranije ).
Ali iako je Neutrinovo rešenje brže i lakše za ovaj slučaj, Selenium je univerzalno rešenje za skrejpovanje sajtova. Jedan od drajvera koje Selenium ima je HtmlUnit drajver, koji simulira kompletan browser bez GUI-ja. Tako da možeš samo da pokreneš aplikaciju u konzoli koja će da ti samo ispiše nalaze i završi brže nego kad se pokreće eksterni browser koji će još da renderuje stranice. Pa i iz Jave možeš da iskoristiš Facebook API. Imaš HTTP klijent (klasa HttpURLConnection), a za JSON imaš biblioteku zvaničnu ovde https://jsonp.java.net . Jeste da je veći posao, ali dobiješ kozolnu aplikaciju koju pokreneš na enter. Možeš onda ako ti treba da generišeš CSV fajl pa da analiziraš podatke u Excelu. @Neutrino: izvini, morao sam malo da nakitim svoj predlog I što je Selenium 3rd party. Selenium je delom razvijan unutar Googlea, a čovek koji je započeo WebDriver tehnologiju je radio za Google, a trenutno radi za Facebook. Poslednja ispravka: ivan90BG (25.3.2015 u 20:37) |
26.3.2015, 15:35 | #6 | |
Deo inventara foruma
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
|
Re: Facebook like counter
Citat:
Šalu na stranu. OP je tražio JavaScript rešenje i dobio ga je a Selenium je 3rd party iz prostog razloga što nije deo jedinog zvaničnog alata za rad sa Facebook servisom - Facebook API-ja. Pošto Facebook API direktno podržava čist JavaScript (pored PHP, iOS SDK i Android SDK platformi) stvarno ne vidim potrebu za eksternim alatima u ovom slučaju |
|
27.3.2015, 21:59 | #7 |
Deo inventara foruma
|
Re: Facebook like counter
Kod:
var likes = (function () { var items = []; jQuery('.w-portfolio-item-anchor').each(function (el, node) { var url = 'http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls=' + node.href; jQuery.ajax(url).done(function (data) { items.push({url: data[0].url, count: data[0].total_count}); }); }); return { sort: function () { items.sort(function (a, b) { return b.count - a.count; }); }, show: function (n) { var str = ""; for (var i = 0; i < n; i += 1){ str += (i+1) + "." + items[i].url + " broj glasova: " + items[i].count + "\n"; } alert(str); } }; })(); Samo sto, zbog toga sto je ajax malo asinhron, moram prvo da pozovem celu skriptu, pa tek onda da kucam likes.sort() pa likes.show(15); kako bi mi se to sve prikazalo Hvala vam na pomoci! |
27.3.2015, 22:50 | #8 |
Deo inventara foruma
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
|
Re: Facebook like counter
Ma može sve automatski. Treba samo da prepraviš kod tako da se nakon svakog završenog AJAX poziva ($.ajax.done()) inkrementira brojač i kad taj broj postane jednak ukupnom broju linkova na stranici automatski okineš sortiranje i ispis
|
Sledeći korisnik se zahvaljuje korisniku Neutrino na korisnoj poruci: | ||
NIx Car (27.3.2015) |
27.3.2015, 23:25 | #9 |
Deo inventara foruma
|
Re: Facebook like counter
Kod:
function sort (items) { items.sort(function (a, b) { return b.count - a.count; }); } function show(items) { var str = ""; for (var i = 0; i < 15; i += 1){ str += (i+1) + "." + items[i].url + " broj glasova: " + items[i].count + "\n"; } alert(str); } var likes = (function () { var items = []; var j = 0; jQuery('.w-portfolio-item-anchor').each(function (el, node) { var url = 'http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls=' + node.href; jQuery.ajax(url).done(function (data) { items.push({url: data[0].url, count: data[0].total_count}); j += 1; if(j == 102){ sort(items); show(items); } }); }); })(); |
27.3.2015, 23:36 | #10 |
Deo inventara foruma
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
|
Re: Facebook like counter
A šta ćeš da radiš ako webmaster ukloni ili doda neki video sa stranice? U tom slučaju si u problemu jer će ono hard kodovano 102 ili da prijavi undefined grešku ili prosto da ignoriše sve preko 102 linka.
U tom slučaju je neuporedivo bolje kupiti ukupan broj linkova sa stranice Kod:
var likes = (function () { var items = []; var j = 0; var nr_videos = jQuery('.w-portfolio-item-anchor').length || 0; jQuery('.w-portfolio-item-anchor').each(function (el, node) { var url = 'http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls=' + node.href; jQuery.ajax(url).done(function (data) { items.push({url: data[0].url, count: data[0].total_count}); j += 1; if(j == nr_videos){ sort(items); show(items); } }); }); })(); |
Sledeći korisnik se zahvaljuje korisniku Neutrino na korisnoj poruci: | ||
NIx Car (27.3.2015) |
27.3.2015, 23:38 | #11 |
Deo inventara foruma
|
Re: Facebook like counter
zato sto su prijave gotove i nijedan video se nece brisati
Btw pod brojem 89 je (igrom slucaja ) moj bend, pa ako imate fejsbuk, udenite lajk |
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Kako optimizovati plugin za Facebook komentare? | hallooo | Web razvoj | 0 | 23.10.2014 13:11 |
[Android] Facebook Messenger Notifikacije | digitalis888 | Programi za mobilne telefone | 4 | 30.9.2014 6:07 |
Facebook i Twitter pluginovi | zukov | Web razvoj | 4 | 11.3.2014 23:59 |
Facebook kupio WhatsApp | ZoNi | Internet tehnologije | 12 | 23.2.2014 12:14 |
Facebook problem - Incorrect Email | Super Mario | otpaTci | 1 | 6.12.2011 17:23 |