Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 27.01.2018 17:22:34

Laravel 5.4+ и fb api , постинг статьи в ленте.

День добрый,
Есть небольшой сайт к примеру блог (новости, статьи).
И хотелось бы сделать так, что бы когда я добавлял к примеру новую статью то оно её постило в бд + постило эту же статью на моей странице в фейсбуке(ленте или новостях).

Не подскажите как можно такое сделать?
Или быть может уже есть такой package?

Не в сети

#2 28.01.2018 03:59:02

Re: Laravel 5.4+ и fb api , постинг статьи в ленте.

Готовых пакетов нет, но есть SDK.
Правда придется повозиться с получением токенов (а они, насколько я знаю, выдаются только в момент авторизации через фейсбук для веб приложения).
Т.е. еще и авторизация понадобится, через фейсбук.

Не в сети

#3 29.01.2018 14:54:45

Re: Laravel 5.4+ и fb api , постинг статьи в ленте.

Токены фб живут 60 дней, если в группу постите. У одного из клиентов сделали постинг в твиттер, фб сразу оттуда подтягивает и с токенами проблем нет. Но это уже
как вы пожелаете.

Примеры результатов тут и тут

Дебагеры фб и twitter

Ставите через композер, почитайте официальные доки:

waavi/url-shortener
thujohn/twitter
facebook/graph-sdk

Код выдернул прям с проекта. Если не поймете пишите

 protected function publishTwitter(SocialPublishing $item)
    {
        SocialLog::newInstance()->info("app", $item->toArray());
        /** @var Apartment $apartment */
        $apartment = $item->apartment()->first();
        if(!is_null($apartment)) {

            $transform = (new ApartmentTransformer())->transformBasic($apartment, "ca");
            $twitterPost = \Twitter::postTweet([
                'status' => $transform->title . " " . UrlShortener::driver('google')->shorten($transform->url),
                'format' => 'object'
            ]);
            $item->twitterId = $twitterPost->id_str;
            $item->twitterStatus = 1;
            $item->save();

            return $item;
        }
        return null;
    }

 protected function publishFacebook(SocialPublishing $item)
    {
        SocialLog::newInstance()->info("app", $item->toArray());
        /** @var Apartment $apartment */
        $apartment = $item->apartment()->first();
        if(!is_null($apartment)) {
            $transform = (new ApartmentTransformer())->transformBasic($apartment, "ca");

            $fb = new Facebook([
                'app_id' => config('social.facebook.appId'),
                'app_secret' => config('social.facebook.app_secret'),
                'default_graph_version' => config('social.facebook.default_graph_version')
            ]);
            $groupId = config('social.facebook.fb_group_id');

            $parts[] = $transform->typeApartmentOperations;
            $parts[] = $transform->bedRoomsValue;
            $parts[] = $transform->locationsValue;
            $parts[] = $transform->price;

            $linkData = [
                'link' => $transform->url,
//                'link' => "[url]http://pisos.ad/anunci-9857/pis-lloguer-encamp-andorra[/url]",
                'message' => implode(", ", $parts),
            ];

            try {
                // Returns a `Facebook\FacebookResponse` object
                $response = $fb->post("/{$groupId}/feed", $linkData, config('social.facebook.default_access_token'));
                $graphNode = $response->getGraphNode();
                $item->fbId = $graphNode['id'];
                $item->fbStatus = 1;
                $item->save();

            } catch(FacebookResponseException $e) {
                SocialLog::newInstance()->info("FacebookResponseException: " . $e->getMessage());
                SocialLog::newInstance()->info($e->getTraceAsString());
                return null;
            } catch(FacebookSDKException $e) {
                SocialLog::newInstance()->info("FacebookSDKException: " . $e->getMessage());
                SocialLog::newInstance()->info($e->getTraceAsString());
                return null;
            }

            return $item;
        }
        return null;
    }

Изменено lodar (29.01.2018 14:57:00)

Не в сети

#4 29.01.2018 15:02:03

Re: Laravel 5.4+ и fb api , постинг статьи в ленте.

Токены фб живут 60 дней, если в группу постите.

60 дней живут же только long lived токены, которые получены через авторизацию мобильного приложения?

config('social.facebook.default_access_token') - это токен чего? как его получили?

Не в сети

#5 29.01.2018 21:47:22

Re: Laravel 5.4+ и fb api , постинг статьи в ленте.

документация

https://developers.facebook.com/tools/explorer, выбираете приложение и  маркеры доступа.

Подставляете и получаете токен.

https://graph.facebook.com/v2.11/oauth/ … client_id=[апп айди]&client_secret=[секретный ключ приложения]&fb_exchange_token=[маркер доступа]

Не претендую на единственное верное и правильное решение. В моем случае надо было быстро и что бы работало. Работает. Если кто-то может подсказать иное решение - с благодарностью почитаю.

Изменено lodar (29.01.2018 21:49:58)

Не в сети

#6 30.01.2018 11:33:50

Re: Laravel 5.4+ и fb api , постинг статьи в ленте.

Спасибо, только поправлю, вырезка из документации "тогда как срок действия маркеров длительного действия составляет около 60 дней."
У меня бывало, что токен терял годность и через 2 недели.
строго 60 дней - это только мобилки.

Изменено covobo (30.01.2018 11:34:05)

Не в сети

Подвал раздела