Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Gotowy skrypt do sortowania podstron według ilości polubień na facebooku
Forum PHP.pl > Forum > Gotowe rozwiązania
daren88
Witam kilka dni temu napisałem prosty skrypt który pobiera z facebooka ilość polubień mojej strony i zapisuje je do bazy dzięki czemu mogę posortować strony według najbardziej lubianych na facebooku , skrypt za każdym razem po uruchomieniu przez crona sprawdza 20 adresów url i jak do tej pory działa ok jednak każdy musi go przystosować do własnych potrzeb guitar.gif

  1.  
  2. <?php
  3.  
  4. // dodajemy do naszej tabelki kolumne lubie_to
  5. // np ALTER TABLE `twoja_tabelka` ADD `lubie_to` INT(10)
  6.  
  7.  
  8. $id = array(); // tutaj trzymamy id artykułu dla którego sprawdzamy ilość polubień
  9. $likes = array(); // tutaj trzymamy ilosc osób które lubią nas na facebooku
  10.  
  11. // haslo do bazy danych
  12.  
  13. require 'haslo_do_bazy.php';
  14.  
  15. // pobieramy plik ktory informuje nas o wierszach w tabeli które trzeba teraz sprawdzić , jak go utworzysz wpisz jakąś cyfre np 0 inaczej bezesz miał błąd , pózniej skrypt sam się zajmie resztą
  16.  
  17. $last_numbers = file_get_contents('last_checked.txt');
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. try {
  25.  
  26.  
  27. $dbh = new PDO("mysql:host=$baza;dbname=$baza[1]",$baza[2], $baza[3]);
  28.  
  29. // sprawdzamy ilosc elementow w bazie
  30.  
  31. $stmt = $dbh->prepare("SELECT * FROM `twoja_tabelka`");
  32. $page_count = $stmt->execute();
  33.  
  34. // Pobieramy 20 elementów z tablicy dla których sprawdzimy ilość polubień , można więcej ale wtedy skrypt się zawiesza
  35.  
  36. $stmt = $dbh->prepare("SELECT * FROM `twoja_tabelka` ORDER BY `id` DESC LIMIT $last_numbers,20");
  37. $stmt->execute();
  38.  
  39.  
  40.  
  41.  
  42. while($wiersz = $stmt->fetch()){
  43.  
  44. // pobieram like z facebooka , dla url z mojej strony
  45.  
  46. $url = 'http://demotivators.us/'.$wiersz['id'].'/'.$wiersz['title'];
  47. $request_url ="https://graph.facebook.com/".$url;
  48. $requests = file_get_contents($request_url);
  49.  
  50. // odczytuje ilość polubień z json
  51. $obj = json_decode($requests);
  52. $like_count=$obj->{'likes'};
  53.  
  54. // Jeżeli ktoś lubi naszą stronę to wciskam id strony oraz ilośc polubień do 2 tablic
  55.  
  56. if(!empty($like_count) and !($like_count == 0)){
  57. array_push($id, $wiersz['id']);
  58. array_push($likes, $like_count);
  59. }
  60.  
  61.  
  62.  
  63.  
  64.  
  65. }
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74. // robimy zapytanie do bazy z akualizacja wierszy i ilosci polubień
  75. // moje dziwaczne zapytanie do bazy używa upade dla wielu wierszy jednocześnie , jak ktoś chce niech zrobi z insert
  76.  
  77.  
  78. foreach($id as $index => $numer_id ){
  79. $sql_warunek.= 'WHEN '.$numer_id.' THEN '.$likes[$index].' ';
  80.  
  81. }
  82.  
  83.  
  84.  
  85. $ile=count($id);
  86. for($i=0;$i<($ile-1);$i++){
  87. $sql_id.= $id[$i].',';
  88. }
  89. $sql_id.= $id[$ile-1];
  90.  
  91.  
  92.  
  93.  
  94. $sql=' UPDATE `twoja_tabelka` SET `lubie_to` =
  95.  
  96. CASE `id`
  97. '.$sql_warunek.'
  98.  
  99.  
  100. END
  101.  
  102.  
  103. WHERE `twoja_tabelka.id in ('.$sql_id.')';
  104.  
  105. // zerknij na to straszydło
  106. echo $sql;
  107.  
  108. // aktualizacja w bazie danych
  109.  
  110. $stmt = $dbh->prepare("$sql");
  111. $stmt->execute();
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123. $dbh = null;
  124.  
  125. }
  126. catch(PDOException $e)
  127. {
  128.  
  129. echo'straszliwy error !!!';
  130.  
  131. }
  132.  
  133.  
  134.  
  135. // ostatnie linijki zapisują do pliku informacje o ostatniu sprawdzonych wierszach z tabeli
  136.  
  137. if($page_count<$last_numbers){
  138.  
  139. $last_numbers=0;
  140. }
  141.  
  142. else{
  143.  
  144. $last_numbers= $last_numbers+20;
  145. }
  146.  
  147.  
  148.  
  149. // zapisujemy
  150.  
  151. file_put_contents('last_checked.txt', $last_numbers , LOCK_EX);
  152.  
  153.  
  154. // tak dla pewności
  155. exit();
  156.  
  157.  
  158.  
  159. ?>
  160.  
  161.  
  162.  
  163.  


baaasmiley.gif

Facebook często wyświetla zawyżoną liczbę polubień przy przycisku like , jednak pod tym adresem https://graph.facebook.com/".$url; znajduje się ich realna ilość dla tego
czasami podstrony mogą wydawać się zle posortowane , możecie sprawdzić że polubienia często są liczone podwójnie jeżeli poza kliknięciem like skomentujesz stronę czyli umieścisz link na tablicy facebooka

Przykład mojej strony z posortowanymi obrazkami według ilości polubień http://demotivators.us/demotivationalposters/1
Ta sama strona sortowana od najnowszych do najstarszych http://demotivators.us/
lobopol
A wiesz, że można wyciągnąć na raz znacznie więcej stron z facebooka niż jedną używając fql? Lepsza metoda to według mnie łapanie like/dislike i przesyłanie ajaxem do bazy zwiększając/zmniejszając i ustawiając jedno pole np. sprawdz na true/1. I cronem co jakiś czas najpierw wyciągać z bazy listę powiedzmy 100 linków które mają być sprawdzone, tworzyć odpowiednie zapytanie fql pobierające ilość likeów/shareów/komentarzy i wynik porównać z tymi z pierwszego zapytania, jeżeli te same to do jednego zapytania ustawiającego sprawdz na false/0, a te które się nie zgadzają przygotować do zapytania ustawiającego prawdziwe wartości i sprawdz na false/0, sporo mniej obciążające bazę i pewniejsze niż zapisywanie do pliku id do sprawdzenia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.