Daniel Wojciechowski

Daniel Wojciechowski Skład DTP, Grafik,
Nowe 7 Dni Gryfina

Temat: Automatyczne publikowanie postów na Facebooku (bez...

Witajcie.

Po przeczytaniu kilkunastu artykułów o automatycznej publikacji po prostu zostałem rozbrojony jak dziecko. Potrzebuję takiej funkcjonalności:
- dodajemy artykuł na naszej stronie http://example.com
- podczas dodawania artykułu(w tle), wywołujemy metodę Facebook i poprzez API (PHP SDK) publikujemy post na naszym fanpagu.

Proste jak budowa cepa. Zrobiłem to rozwiązanie następująco:


<?php
require '/inc/facebook.php';
$page_id = '00000000000000000';
$appId = '0000000000000000';
$appSecret = '1111111111111111111';
$accessToken = 'dlugidlugiaccesstoken';

$facebook = new Facebook(array(
'appId' => $appId,
'secret' => $appSecret,
'cookie' => true
));
$facebook->setAccessToken($accessToken);
try
{
$facebook->api('/'.$page_id .'/links', 'post', array(
'message' => 'Treść naszego artykułu ',
'link' => 'https://example.com/link'
));
}
catch(FacebookApiException $e)
{
echo $e->getMessage();
}
?>


Jak widać accessToken wpisałem tu na sztywno żeby w ogóle zadziałało. Token wygaśnie po koło 2 godzinach. I sedno, jak otrzymać ten accessToken automatycznie? Aby go uzyskać potrzebne jest zalogowanie do konta FB, ale w tej sytuacji to nie możliwe. Uzyskanie tokena 60-dniowego (fb_exchange_token) ok, nie idealnie ale jak to wykonać. Brakuje mi w całym kodzie autoryzacji użytkownika, jakiegoś userId, cokolwiek żeby z automatu uzyskać najświeższy accessToken.

Najlepiej sprawę oddają artykuły:
http://webhelp.pl/artykuly/facebook-automatyczne-dodaw...
http://stackoverflow.com/questions/12797742/how-to-pub...

Ale ciągle mamy tu kliknięcie w logowanie, potrzeba fizycznej interakcji użytkownika, a przy automacie to przecież nie możliwe. Prosiłbym z waszej strony o podpowiedź, już mi dosłownie ręce opadają.
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: Automatyczne publikowanie postów na Facebooku (bez...

był scope offline_access, niestety facebook zrobił go deprecated i trzeba odnawiać token co 2 miesiące (poprzez zalogowanie użytkownika np. w popupie).Piotr Krajewski edytował(a) ten post dnia 30.01.13 o godzinie 15:24
Daniel Wojciechowski

Daniel Wojciechowski Skład DTP, Grafik,
Nowe 7 Dni Gryfina

Temat: Automatyczne publikowanie postów na Facebooku (bez...

czyli pozostaje uzyskiwać token co 2 miesiące... na prawdę nic więcej nie można w tym wypadku zrobić? Jakiś refresh tego tokena, żeby tylko pominąć to logowanie. Jak pozostawimy tą aplikację klientowi, to przecież za Chiny sobie tego sam nie wprowadzi, nawet jeśli ograniczy się to do kliknięcia w odnośnik i zalogowania fizycznie do FB...

Temat: Automatyczne publikowanie postów na Facebooku (bez...

$token_url = "https://graph.facebook.com/oauth/access_token?" .
"client_id=" . FACEBOOK_APP_ID .
"&client_secret=" . FACEBOOK_APP_SECRET .
"&grant_type=client_credentials";

$accessToken = file_get_contents($token_url);

może da rade coś takiego
Kamil S.

Kamil S. Backend Engineer and
Symfony Developer

Temat: Automatyczne publikowanie postów na Facebooku (bez...

Musicie się na podstawie danych zgłosić do fejsa po long time tokena, potem tego tokena wstrzykujecie i macie dostęp zdalny bez potrzeby każdorazowego proszenia o logowanie przez usera.
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: Automatyczne publikowanie postów na Facebooku (bez...

jeśli dobrze pamiętam to long time token nie dotyczy aplikacji webowych (jedynie desktopowych i mobilnych)
Daniel Wojciechowski

Daniel Wojciechowski Skład DTP, Grafik,
Nowe 7 Dni Gryfina

Temat: Automatyczne publikowanie postów na Facebooku (bez...

Ostatecznie rozwiązałem to tak. Kod który przedstawiłem wyżej zastosowałem do publikowania postu bez zmian, zaś token uzyskałem tak:


<?php
require '/inc/facebook.php';
$page_id = '00000000000000000';
$appId = '0000000000000000';
$appSecret = '1111111111111111111';

$facebook = new Facebook(array(
'appId' => $appId,
'secret' => $appSecret
));

$session = $facebook->getUser(); // tu oryginalnie było getSession ale teraz jest deprecated
/*$accounts = $facebook->api('/me/accounts');
foreach($accounts['data'] as $account)
echo($account['id']." - ".$account['name']." - ".$account['access_token']."<br />");*/

$me = null;
if ($session) {
try {
// pobieramy informacje o użytkowniku
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}

// pobieranie listy stron administrowanych przez użytkownika
if($me)
{
$accounts = $facebook->api('/me/accounts');
foreach($accounts['data'] as $account)
echo($account['id']." - ".$account['name']." - ".$account['access_token']."<br />");
?>
<a href="https://graph.facebook.com/me/accounts&access_token=<? echo($session['access_token']); ?>">Lista stron</a><br />
<?
}
?>
<a href="<? echo($facebook->getLoginUrl(array('req_perms' => 'manage_pages,publish_stream,offline_access'))); ?>">Login</a>


Czymś takim, jednorazowo zalogowałem się do swojego konta adminsitratora z uprawnieniami: manage_pages,publish_stream,offline_access i w efekcie uzyskałem id stron wraz z ich accesstokenami które po sprawdzeniu w OG Debuggerze wykazały iż ich data ważności ustawiona jest na "nigdy" :) Szkoda że to jednak nie działa w pełni automatycznie, ale to rozwiązanie mnie satysfakcjonuje. Temat uważam za zamknięty jednak jeśli ktoś ma coś do powiedzenia to wątek pozostawiam wolnym. Gdyby ktoś miał ochotę odpisać .... do publikacji na fanpagu używamy ścieżki "$page_id/links" , jeszcze tak na prawdę można korzystać z $page_id/feed ale Facebook już krzyczy że będzie deprecated. Używając /feed opublikowany post był widoczny jakby był opublikowany ręcznie, z kolei używając /links przy poście widnieje informacja iż został on dodany za pomocą mojego app. Czy jestescie w posiadaniu wiedzy o tym, czy Facebook ma na to jakieś rozwiązanie, czy właśnie /link jest tym rozwiązaniem ?

konto usunięte

Temat: Automatyczne publikowanie postów na Facebooku (bez...

Curl'em się pobaw.

Następna dyskusja:

Api Facebook - publikowanie...




Wyślij zaproszenie do