2008-12-20 13 views
9

Szukam dobrej, prostej funkcji PHP, aby uzyskać najnowsze aktualizacje statusu Facebook. Ktoś o tym wie?Funkcja PHP, aby uzyskać status Facebooka?

Dzięki!

EDYCJA: Dodałem pół rozwiązanie poniżej.

A może ktoś zna dobry sposób na czytanie w kanale RSS i wypluwa najnowszą aktualizację statusu?

+0

ciekawe pytanie. Ja też chcę tej odpowiedzi! – Skuta

+0

Niestety prawie wszystkie z opisanych poniżej metod są już nieaktualne:/ – Petrogad

Odpowiedz

1

nigdy nie wydają się dogadać z gruszką, ale jeśli masz więcej szczęścia niż ja, to rozwiązanie wydaje PEAR najlepszą trasę dłuższą metę.

Innym pomysłem jest zapoznanie się z biblioteką Facebook Developer API i sprawdzenie, czy to może dać ci wszystko, czego szukasz.

Wreszcie, był sposób na pozyskanie kanału RSS ... ale nie mogę znaleźć instrukcji, które działają, ale możesz pokusić się o pomoc na Facebooku, jeśli cię to interesuje. Kopalnia kończy się szuka czegoś takiego:

http://www.new.facebook.com/feeds/status.php?id=[idnumber]&viewer=[viewer]&key=[key]&format=rss20

3

Jest to niepełna odpowiedź, ale to co ja dotarłeś tak daleko:

pierwsze: add the developer application on FB. Następnie utwórz nową aplikację. Nazwij to, co chcesz.

drugie: Download the PHP client. zrzucić go gdzieś na dysku witryną, tj/facebook/

trzecie: Skopiuj poniższy początkujących kod, aby dostać się zaczęło do pliku PHP:

<?php 
require_once('facebook/php/facebook.php'); 
$facebook = new Facebook("YOUR_API_KEY","YOUR_SECRET_KEY"); 
$result = $facebook->api_client->fql_query("SELECT status FROM user WHERE uid = YOURIDNUMBER"); 
// OR --- they both get the same data 
$result = $facebook->api_client->users_getInfo(YOURIDNUMBER,'status'); 
print_r($result); 
echo "<pre>Debug:" . print_r($facebook,true) . "</pre>"; // debug info 
?> 

Inne info:

  • Musisz być zalogowany i mieć aplikację dodaną. LUB udzielasz aplikacji uprawnień offline_access i dodajesz aplikację o numerze .
  • Możesz dodać offline_access wpisując w następującym adresem URL: http://www.facebook.com/authorize.php?api_key=YOUR_API_KEY&v=1.0&ext_perm=offline_access
  • więcej informacji o uprawnieniach znaleźć tutaj: http://wiki.developers.facebook.com/index.php/Extended_permissions
  • jestem w punkcie zatrzymania: cokolwiek mój program wywołuje zapytanie FQL lub users_getInfo moja strona zatrzymuje się podczas wykonywania php? Zgaduję, że jest ograniczona liczba połączeń dla nowych aplikacji? Nigdy nie zrobiłem żadnego projektu FB, więc jestem całkowicie nowy. Może zadzwonić pod numer i zapisać swój najnowszy status (lub najnowsze stany) w swoim własnym DB , aby zapobiec nadmiernemu nawiązywaniu połączeń z interfejsem API ?

Mam nadzieję, że pomoże to komuś w rozpoczęciu pracy!

EDIT: Wydaje się, że FB nie pozwoli Ci uzyskać dostęp czyjąś status, nawet jeśli offline_access jest włączony, chyba że jesteś, że osoba lub ich przyjaciel (w zależności od swoich ustawień prywatności).

zrobiłem jednak ostatecznie udało się znaleźć kanał RSS w nowej wersji profilu: http://www.new.facebook.com/minifeed.php?filter=11

+0

Powinieneś coś zobaczyć gdzieś. Puste wyjście jest zwykle oznaką błędu krytycznego przechodzącego do apache error_log, gdy masz display_errors = off w twoim php.ini. Klient FB ma ładną funkcję OO w PHP5 i generuje dość znaczące i szczegółowe wyjątki w przypadku wystąpienia błędu. – Ian

+0

Zakończyłem resetowanie mojego klucza SECRET i to rozwiązało problem. Jednak moje zapytanie fql nie da żadnych wyników, chyba że dołączę: $ fb_user = $ facebook-> require_login() ;. Wydaje się, że uprawnienie offline nie działa poprawnie lub zamierzam to źle. –

+0

Oto działający link do klienta PHP: http://github.com/facebook/php-sdk/ –

0
<?php 
// see http://github.com/facebook/php-sdk/blob/master/facebook.php 
require './facebook.php'; 
// Create our Application instance. 
// see http://www.youtube.com/watch?v=jYqx-RtmkeU for how to get these numbers 
$facebook = new Facebook(array('appId' => 'XXX','secret' => 'XXX')); 
// This call will always work since we are fetching public data. 
// this could be /username or /username/friends etc... 
// see developer api for FQL for examples 
$status = $facebook->api('/haanmc/feed?limit=1'); 
?> 
<p><?php print $status['data'][0]['message']; ?></p> 
<p>Likes: <?php print $status['data'][0]['likes']; ?> | Comments: <?php print count($status['data'][0]['comments']['data']); ?></p> 
<textarea style="width: 95%; height: 600px;"><?php print_r($status); ?></textarea> 
2

Znalazłem sposób, aby pobrać swój najnowszy status na Facebooku. Oto, jak to zrobić:

1) Create a facebook app i skopiuj tajny identyfikator aplikacji i aplikacji.

2) Przyznaj aplikacji read_stream i offline_access do swojego profilu. (http://developers.facebook.com/docs/authentication/permissions) Aby pobrać najnowszy status, aplikacja wymaga hasła access_token. Z przyznanym offline_access, access_token powinien "nigdy" wygasnąć. Najprostszym sposobem, aby to zrobić, to kliknąć przycisk wygenerowany przez ten kod: (należy wypełnić „app id” i ustawić plik cookie prawda!)

<fb:login-button perms="read_stream,offline_access"></fb:login-button> 
<div id="fb-root"></div> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script>FB.init({appId: 'your app id', status: true, cookie: true, xfbml: true});</script> 

3) Teraz spróbuj dowiedzieć się, co access_token używa. Tag access_token jest zapisany w pliku cookie fbs_appId. Zlokalizuj go za pomocą przeglądarki lub używając $_COOKIE['fbs_appId']. Wyszukaj access_token=....

4) Teraz, że masz (mamy nadzieję) nigdy upływającym access_token można użyć następującego kodu:

$access_token='xxxxxxxxxxxxxxxxxxxx'; 
$appId='123456789132456789'; 
$appSecret='xxxxxxxxxxxxxxxxxxxx'; 
$profileId='123456789'; 

//http://github.com/facebook/php-sdk/blob/master/src/facebook.php 
require 'facebook.php'; 

$facebook = new Facebook(array('appId' => $appId,'secret' => $appSecret)); 
$response = $facebook->api('/'.$profileId.'/feed?limit=1&access_token='.$access_token); 

5) część wiadomość powinna zostać zlokalizowany: $response['data'][0]['message']

nie wiem Jak długo token dostępu jest ważny. Facebook mówi:

Umożliwia aplikacji wykonywanie autoryzowanych żądań w imieniu użytkownika w dowolnym momencie. Domyślnie większość tokenów dostępu wygasa po krótkim czasie, aby zapewnić, że aplikacje wysyłają tylko żądania w imieniu użytkownika, gdy aktywnie korzystają z aplikacji. To uprawnienie powoduje, że token dostępu zwrócony przez nasz punkt końcowy OAuth był długożyciowy.

1

Mam to działa za pomocą postu Jensa, aby odzyskać prawidłowy token dostępu. Następnie wyodrębniłem komunikaty o stanie i czas wysłania z pliku xml za pomocą następującego kodu (można zmienić limit $, aby wyświetlić mniej lub więcej komunikatów o stanie, lub użyć formularza, aby to zmienić).

Pamiętaj, aby umieścić swój identyfikator Facebooka i token dostępu z utworzonej aplikacji (patrz Jens' post). Możesz sprawdzić dane wyjściowe tego skryptu here.

Miłej zabawy!

<?php 
if(isset($_POST['limit'])) { 
    $limit = $_POST['limit']; 
} 
else { 
    $limit = 3; // number of status messages to display 
} 
$f = fopen ("https://api.facebook.com/method/status.get?uid=YOUR_FACEBOOK_ID&limit=".$limit."&access_token=YOUR_ACCESS_TOKEN", "r"); 

while ($line= htmlentities(fgets($f))) { 
    if ($line===FALSE) print ("FALSE\n"); 
    else 
    { 
     $content = $content." ".$line; 
    } 
} 
fclose ($f); 

$message = explode("&lt;message&gt;", $content); // search for the <message> tag 
$message_cnt = count($message); 
$msg_index = 0; 

$time = explode("&lt;time&gt;", $content); // search for the <time> tag 

for($i=1; $i<$message_cnt; $i++) 
{ 
    $tmp = explode("&lt;/message&gt", $message[$i]); 
    $msg[$msg_index] = $tmp[0]; // status message 

    $tmp2 = explode("&lt;/time&gt", $time[$i]); 
    $t[$msg_index++] = $tmp2[0]; // time of posting 
} 

for($i=0; $i<$msg_index; $i++) 
{ 
    echo("<span class=\"status\">".preg_replace('!\015\012|\015|\012!','<br>',$msg[$i])."</span><br>\n 
      <span class=\"date\">on ".date("d.m.Y", $t[$i])." at ".date("H:i",$t[$i])."</span><br><br>\n"); 

} 
?> 
2

Oto NAPRAWDĘ prostą funkcję, jeśli chcesz tylko uzyskać najnowszy status. To nie zależy od pakietu SDK Facebooka ani czegokolwiek. Potrzebujesz wsparcia CURL i JSON.

Simple PHP function to get facebook status

+0

Wycofano, ponieważ zaoszczędziłem trochę czasu po poprawieniu błędów w obudowie nazw zmiennych i brak sprawdzenia, czy tablica ma wartości przed iterowaniem itp. – jerrygarciuh

1

Wystarczy użyć PHPforFB ramy (www.phpforfb.com/en/) dla najszybszy sposób.

Kod wygląda następująco:

require_once('phpforfb_framework.php'); 

$structInit = array('app_id' => APP_ID,'app_name' => APP_NAME,'sec_key' => APP_SECKEY); 

$FacebookAPP = new PHPforFB($structInit); 

if($FacebookAPP->lastErrorCode>0){ 
    //Creation failed => Display error message and exit 
    echo "PHPforFB Error: ".$FacebookAPP->lastErrorCode." -> ".$FacebookAPP->lastError; 
}else{ 
    //PHPforFB framework established 

    if($FacebookAPP->userLoggedIn === TRUE){ 

     //If the user is logged in at Facebook: 
     //Here you can determine if the user has at least once before 
     //granted basic permissions to your application. 
     if($FacebookAPP->userAuthenticated === FALSE){ 

      //The user has not yet granted permissions 
      //**your code here** 
     }else{ 
      //The user has already granted permissions, therefore his Facebook ID 
      //is known to us. It is always available in $FacebookAPP->userID: 

      $userID = $FacebookAPP->userID; 
      //**your code here** 
     } 
    } 
}