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 (IMG:
style_emoticons/default/guitar.gif)
<?php
// dodajemy do naszej tabelki kolumne lubie_to
// np ALTER TABLE `twoja_tabelka` ADD `lubie_to` INT(10)
$id = array(); // tutaj trzymamy id artykułu dla którego sprawdzamy ilość polubień $likes = array(); // tutaj trzymamy ilosc osób które lubią nas na facebooku
// haslo do bazy danych
require 'haslo_do_bazy.php';
// 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ą
try {
$dbh = new PDO("mysql:host=$baza;dbname=$baza[1]",$baza[2], $baza[3]);
// sprawdzamy ilosc elementow w bazie
$stmt = $dbh->prepare("SELECT * FROM `twoja_tabelka`");
$page_count = $stmt->execute();
// Pobieramy 20 elementów z tablicy dla których sprawdzimy ilość polubień , można więcej ale wtedy skrypt się zawiesza
$stmt = $dbh->prepare("SELECT * FROM `twoja_tabelka` ORDER BY `id` DESC LIMIT $last_numbers,20");
$stmt->execute();
while($wiersz = $stmt->fetch()){
// pobieram like z facebooka , dla url z mojej strony
$url = 'http://demotivators.us/'.$wiersz['id'].'/'.$wiersz['title'];
$request_url ="https://graph.facebook.com/".$url;
// odczytuje ilość polubień z json
$obj = json_decode($requests);
$like_count=$obj->{'likes'};
// Jeżeli ktoś lubi naszą stronę to wciskam id strony oraz ilośc polubień do 2 tablic
if(!empty($like_count) and
!($like_count == 0
)){ }
}
// robimy zapytanie do bazy z akualizacja wierszy i ilosci polubień
// moje dziwaczne zapytanie do bazy używa upade dla wielu wierszy jednocześnie , jak ktoś chce niech zrobi z insert
foreach($id as $index => $numer_id ){
$sql_warunek.= 'WHEN '.$numer_id.' THEN '.$likes[$index].' ';
}
for($i=0;$i<($ile-1);$i++){
$sql_id.= $id[$i].',';
}
$sql_id.= $id[$ile-1];
$sql=' UPDATE `twoja_tabelka` SET `lubie_to` =
CASE `id`
'.$sql_warunek.'
END
WHERE `twoja_tabelka.id in ('.$sql_id.')';
// zerknij na to straszydło
// aktualizacja w bazie danych
$stmt = $dbh->prepare("$sql");
$stmt->execute();
$dbh = null;
}
catch(PDOException $e)
{
echo'straszliwy error !!!';
}
// ostatnie linijki zapisują do pliku informacje o ostatniu sprawdzonych wierszach z tabeli
if($page_count<$last_numbers){
$last_numbers=0;
}
else{
$last_numbers= $last_numbers+20;
}
// zapisujemy
file_put_contents('last_checked.txt', $last_numbers , LOCK_EX);
// tak dla pewności
?>
(IMG:
style_emoticons/default/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/1Ta sama strona sortowana od najnowszych do najstarszych
http://demotivators.us/