مكتبة PHP لحكم التغذية الاجتماعية ، لتراجعها بالسحر ، مكتبة PHP لجمعها وربطها في الظلام
docker pull rezozero/mixedfeed
docker run -p 8080:80
-e MF_FACEBOOK_PAGE_ID="xxx"
-e MF_FACEBOOK_ACCESS_TOKEN="xxxx"
-e MF_INSTAGRAM_USER_ID="xxx"
-e MF_INSTAGRAM_ACCESS_TOKEN="xxxx"
-e MF_CACHE_PROVIDER="apcu"
-e MF_FEED_LENGTH="30"
rezozero/mixedfeed
أو استخدم docker-compose : Copy docker-compose.yml to docker-compose.test.yml وملء بيانات اعتماد مزودك. ثم تنفيذ docker-compose -f docker-compose.test.yml up -d --force-recreate ، سيكون MixedFeed متاحًا على http: // localhost: 8080
| اسم | القيمة الافتراضية | عديد؟ (فاصلة منفصلة) |
|---|---|---|
| mf_cache_provider | صفيف | |
| mf_feed_length | 12 | |
| mf_facebook_page_id | ✅ | |
| mf_facebook_access_token | ||
| mf_facebook_fields | من ، الارتباط ، الصورة ، full_picture ، الرسالة ، القصة ، النوع ، Create_time ، Source ، status_type | ✅ |
| mf_facebook_endpoint | https://graph.facebook.com/v2.12/ | |
| mf_graph_instagram_user_id | ✅ | |
| mf_graph_instagram_access_token | ✅ | |
| mf_github_release_repository | ✅ | |
| mf_github_commits_repository | ✅ | |
| mf_github_access_token | ||
| mf_medium_username | ✅ | |
| mf_medium_user_id | استخدم نفس الترتيب كما في MF_MEDIUM_USERNAME | ✅ |
| mf_pinterest_board_id | ✅ | |
| mf_pinterest_access_token | ||
| mf_instagram_oembed_id | ✅ | |
| mf_twitter_search_query | ||
| mf_twitter_user_id | ✅ | |
| mf_twitter_access_token | ||
| mf_twitter_access_token_secret | ||
| mf_twitter_consumer_key | ||
| mf_twitter_consumer_secret | ||
| mf_twitter_extended_mode | 0 | |
| mf_youtube_playlist_id | ✅ | |
| mf_youtube_api_key |
يحتاج MixedFeed V3+ على الأقل إلى 7.2 PHP ، تحقق من تكوين الخادم الخاص بك.
composer require rezozero/mixedfeed use RZ MixedFeed MixedFeed ;
use RZ MixedFeed GraphInstagramFeed ;
use RZ MixedFeed TwitterFeed ;
use RZ MixedFeed TwitterSearchFeed ;
use RZ MixedFeed FacebookPageFeed ;
use RZ MixedFeed GithubReleasesFeed ;
use RZ MixedFeed GithubCommitsFeed ;
$ feed = new MixedFeed ([
new GraphInstagramFeed (
' instagram_user_id ' ,
' instagram_access_token ' ,
null , // you can add a doctrine cache provider
[] // And a fields array to retrieve too
),
new TwitterFeed (
' twitter_user_id ' ,
' twitter_consumer_key ' ,
' twitter_consumer_secret ' ,
' twitter_access_token ' ,
' twitter_access_token_secret ' ,
null , // you can add a doctrine cache provider
true , // exclude replies true/false
false , // include retweets true/false
false // extended mode true/false
),
new TwitterSearchFeed (
[
' #art ' , // do not specify a key for string searchs
' from ' => ' rezo_zero ' ,
' since ' => ' 2015-11-01 ' ,
' until ' => ' 2015-11-30 ' ,
],
' twitter_consumer_key ' ,
' twitter_consumer_secret ' ,
' twitter_access_token ' ,
' twitter_access_token_secret ' ,
null , // you can add a doctrine cache provider
false // extended mode true/false
),
new FacebookPageFeed (
' page-id ' ,
' app_access_token ' ,
null , // you can add a doctrine cache provider
[], // And a fields array to retrieve too
null // A specific Graph API Endpoint URL
),
new GithubCommitsFeed (
' symfony/symfony ' ,
' access_token ' ,
null // you can add a doctrine cache provider
),
new GithubReleasesFeed (
' roadiz/roadiz ' ,
' access_token ' ,
null // you can add a doctrine cache provider
),
new RZ MixedFeed YoutubePlaylistItemFeed (
' your_playlist_id ' ,
' api_key ' ,
null // you can add a doctrine cache provider
),
]);
return $ feed -> getItems ( 12 );
// Or use canonical RZMixedFeedCanonicalFeedItem objects
// for a better compatibility and easier templating with multiple
// social platforms.
return $ feed -> getAsyncCanonicalItems ( 12 ); يمكن لـ MixedFeed أن تجمع بين الأعلاف الاجتماعية المتعددة حتى تتمكن من الحلقات عليها واستخدام بعض حقول البيانات الشائعة مثل feedItemPlatform و normalizedDate و canonicalMessage . ستقوم MixedFeed بفرز جميع عناصر التغذية الخاصة بك عن طريق التنازل عن normalizedDate ، ولكن يمكنك تكوينه لفرز تصاعدي :
new MixedFeed ([…], MixedFeed:: ASC );يجب على كل مزود تغذية حقن هذه المعلمات الثلاثة في عناصر التغذية:
feedItemPlatform : هذا هو اسم شبكتك الاجتماعية كسلسلة IE «Twitter». سيكون من المهم تخزين خلاصتك ومحرك قالب HTML الخاص بك لتقديم كل عنصر تغذية بشكل صحيح.على سبيل المثال ، إذا كنت تستخدم Twig ، فستتمكن من تضمين مجموعة فرعية لكل منصة اجتماعية.
{% for socialItem in mixedFeedItems %}
{% include ‘social-blocks/‘ ~ socialItem . feedItemPlatform ~ ‘.html.twig’ %}
{% endfor %}normalizedDate : هذه معلمة حرجة لأنها تسمح لـ MixedFeed بفرز عكس الأعلاف المتعددة من الناحية الزمنية مع هياكل غير متجانسة.canonicalMessage : هذا حقل مفيد يحتوي على محتوى النص لكل عنصر عبر جميع الأنظمة الأساسية. يمكنك استخدام هذا لعرض نصوص العناصر داخل حلقة بسيطة. إذا كنت بحاجة إلى تسلسل MixedFeed الخاص بك إلى JSON أو XML مرة أخرى ، فلن ترغب في الحصول على جميع البيانات الأولية الموجودة في كل عنصر تغذية اجتماعية. بحيث يمكنك استخدام $feed->getAsyncCanonicalItems(12); الطريقة بدلاً من getItems للحصول على كائن أكثر إيجازًا مع بيانات أساسية: RZMixedFeedCanonicalFeedItem . سوف توفر هذه الحقول :
stringstring منصةstring المؤلفstring الارتباطstring العنوانstring الرسائلint|nullint|null : مشاركة ، تعليقات أو إعادة تغريد الاعتماد على النظام الأساسي.Image[]string URLinteger العرضintegerDateTimearray العلامات (تستخدم فقط مع MediumFeed )stdClass الخام للوصول إلى كائن API الخام إذا كانت حقول العناصر الكنسية ليست كافية عندما تحتوي FeedItem على صور ، ستعقد FeedItem::$images مجموعة من كائنات RZMixedFeedCanonicalImage للوصول بشكل أفضل إلى url width height إذا كانت متوفرة.
يجب على كل مزود تغذية تنفيذ كيفية ترطيب FeedItem من طريقة createFeedItemFromObject() .
| فئة مزود التغذية | وصف | feedItemPlatform |
|---|---|---|
| متوسطة | اتصل على https://medium.com/username/latest نقطة النهاية. إنه يحتاج فقط إلى $username و $userId اختياري لتحسين الاتساق على الطلبات (يبدو أن المتوسط يطبق ذاكرة التخزين المؤقت على طلبات اسم المستخدم حتى بعد تغيير معلمة الاستعلام ، أي حد نشر). يسمح المتوسط بحد أقصى 14 وظيفة لكل طلب. | medium |
| Instagramoembedfeed | اتصل على https://api.instagram.com/oembed/ Endpoint. إنه يحتاج فقط إلى صفيف $embedUrls | instagram_oembed |
| GraphInstagramfeed | استدعاء عبر graph.instagram.com/$userId/media نقطة نهاية مع عرض API الأساسي. يحتاج إلى $userId و $accessToken . تحذير : يجب تحديث الرمز المميز كل 60 يومًا ، استخدم RefreshInstagramAccessToken | instagram |
DEPRECATED : اتصل على /v1/users/$userId/media/recent/ endpoint. إنه يحتاج إلى $userId و $accessToken | instagram | |
| Twitterfeed | استدعاء statuses/user_timeline نقطة نهاية. يتطلب الأمر $userId ، $consumerKey ، $consumerSecret ، و $accessToken و $accessTokenSecret . كن حذرًا ، لا يمكن أن تعود نقطة النهاية هذه إلا إلى ما يصل إلى 3200 من أحدث تغريدات المستخدم ، فقد يكون عدد العناصر أقل من المتوقع. بنفس الطريقة ، يزيل Twitter إعادة تغريد بعد استرداد عدد العناصر. | twitter |
| TwittersearchFeed | اتصل على نقطة نهاية search/tweets . يتطلب الأمر صفيف $queryParams ، $consumerKey ، و $consumerSecret ، و $accessToken و $accessTokenSecret . كن حذرًا ، لن يسترجع API على Twitter التغريدات التي تزيد قيمتها عن 7 أيام ، فقد يكون عدد العناصر أقل من المتوقع. يجب أن تكون $queryParams صفيفًا بقيمة مفتاح مع مشغلي الاستعلام وفقًا لوثائق API Twitter. | twitter |
| Facebookpagefeed | اتصل عبر https://graph.facebook.com/v3.3/$pageId/posts نقطة نهاية افتراضيًا. يمكن تغيير نقطة النهاية باستخدام معلمة $apiBaseUrl . يتطلب $pageId و $accessToken . يعمل مزود التغذية هذا فقط على صفحات Facebook العامة. للحصول على زيارة تصل إلى: https://developers.facebook.com/docs/facebook-login/access-tokens. بشكل افتراضي ، picture ، message ، story ، created_time _time ، يتم الاستعلام عن حقول status_type ، يمكنك إضافة خاص بك عن طريق تمرير صفيف $field كمعلمة أخيرة. يمكنك إضافة since until معلمات الاستعلام باستخدام أساليب setSince(Datetime) و setUntil(Datetime) . يمكنك الكتابة فوق الافتراضي | facebook_page |
| Pinterestboardfeed | استدعاء Over /v1/boards/$boardId/pins/ نقطة النهاية. يتطلب $boardId و $accessToken . للحصول على زيارة تصل إلى: https://developers.pinterest.com/tools/access_token/ | pinterest_board |
| githubreleasesfeed | استدعاء api.github.com/repos/:user/:repo/releases ENDPOINT. يتطلب $repository ( مستخدم/مستودع ) و $accessToken . يمكنك إضافة معلمة $page الأخيرة. للحصول على زيارة وصول: https://github.com/settings/tokens | github_release |
| githubCommitsfeed | استدعاء api.github.com/repos/:user/:repo/commits Endpoint. يتطلب $repository ( مستخدم/مستودع ) و $accessToken . يمكنك إضافة معلمة $page الأخيرة. للحصول على زيارة وصول: https://github.com/settings/tokens | github_commit |
| YouTubeMostPopularFeed | اتصل على googleapis.com/youtube/v3/videos نقطة نهاية مع مخطط mostPopular (إنه نوع من مثال على ذلك). يتطلب الأمر $apiKey مع حساب Google Cloud Console صالح (مع عدم وجود حصة خالية) وتمكين API لبيانات YouTube . | youtube_playlist_items |
| YouTubeplayListItemFeed | استدعاء googleapis.com/youtube/v3/playlistItems نقطة النهاية. يتطلب الأمر $apiKey مع حساب Google Cloud Console صالح (مع عدم وجود حصة خالية) وتمكين API لبيانات YouTube . | youtube_playlist_items |
كل مزود تغذية يرث من AbstractFeedProvider يمكنه الوصول إلى طريقة setTtl() من أجل تعديل وقت ذاكرة التخزين المؤقت الافتراضية. بشكل افتراضي ، يتم تعيينه لمدة 7200 ثانية ، بحيث يمكنك ضبطها لإبطال ذاكرة التخزين المؤقت للمبدأ في كثير من الأحيان أو أقل.
هناك الكثير من واجهات برمجة التطبيقات على الإنترنت ، ولن تتمكن هذه الأداة من التعامل معها جميعًا. ولكن هذه ليست مشكلة ، يمكنك بسهولة إنشاء مزود التغذية الخاص بك في MixedFeed . عليك فقط إنشاء فئة جديدة ترث من RZMixedFeedAbstractFeedProvider . بعد ذلك ، سيتعين عليك تنفيذ بعض الطرق من FeedProviderInterface :
getRequests($count = 5): Generator التي تُرجع مولد Request Guzzle ليتم تحويله إلى استجابة. هذا هو الخيار الأفضل لأنه سيمكن تجميع طلبات ASYNC .supportsRequestPool(): bool إذا كان من الممكن تجميع مزودك لتعزيز العروض. إذا كنت تستخدم مكتبة طرف ثالث لجلب بياناتك (مثل بعض النظام الأساسي SDK) ، فيجب عليك تعيينها على false .createFeedItemFromObject($item) طريقة تحويل كائن التغذية الخام إلى RZMixedFeedCanonicalFeedItem RZMixedFeedCanonicalImagegetDateTime للبحث عن حقل DateTime الحرج في خلاصتك.getFeed Method لاستهلاك نقطة نهاية API الخاصة بك مع حد العد والعناية بالتخزين المؤقت لاستجاباتك. يجب أن تقوم هذه الطريقة بتحويل عناصر التغذية الخاصة بك إلى كائنات stdClass ، وليس المصفوفات.getCanonicalMessage للبحث عن محتوى النص المهم في عناصر الخلاصة الخاصة بك.getFeedPlatform للحصول على معرف نص عالمي لعناصر التغذية الخاصة بك.لا تتردد في التحقق من مقدمي الخلاصة الحاليين لمعرفة كيفية عملهم. وننصحك بشدة بتنفيذ نظام التخزين المؤقت لعدم الاتصال بنقاط نهاية واجهة برمجة التطبيقات (API) في كل طلب. بشكل افتراضي ، نستخدم نظام التخزين المؤقت للعقيدة والذي يحتوي على العديد من خيارات التخزين.
إذا كنت بحاجة إلى دمج خلاصات الشبكة الاجتماعية مع مقالات موقع الويب الخاص بك ، فيمكنك إنشاء مجموعة مخصصة لتغذي كائنات العقيدة الخاصة بك في عناصر stdClass . ستحتاج إلى تنفيذ طريقة getFeed الخاصة بك باستخدام EntityManager:
protected $ entityManager ;
public function __construct ( Doctrine ORM EntityManagerInterface $ entityManager )
{
$ this -> entityManager = $ entityManager ;
}
protected function getFeed ( $ count = 5 )
{
return array_map (
function ( Article $ article ) {
$ object = new stdClass ();
$ object -> native = $ article ;
return $ object ;
},
$ this -> entityManager -> getRepository (Article::class)-> findBy (
[],
[ ' datetime ' => ' DESC ' ],
$ count
)
);
}
protected function createFeedItemFromObject( $ item )
{
$ feedItem = new RZ MixedFeed Canonical FeedItem ();
$ feedItem -> setDateTime ( $ this -> getDateTime ( $ item ));
$ feedItem -> setMessage ( $ this -> getCanonicalMessage ( $ item ));
$ feedItem -> setPlatform ( $ this -> getFeedPlatform ());
for ( $ item -> images as $ image ) {
$ feedItemImage = new RZ MixedFeed Canonical Image ();
$ feedItemImage -> setUrl ( $ image -> url );
$ feedItem -> addImage ( $ feedItemImage );
}
return $ feedItem ;
}ثم يمكنك تحديد طرق تاريخ التاريخ والرسم الكنسي للنظر في هذا الكائن:
/**
* @inheritDoc
*/
public function getDateTime ( $ item )
{
if ( $ item -> native instanceof Article) {
return $ item -> native -> getDatetime ();
}
return null ;
}
/**
* @inheritDoc
*/
public function getCanonicalMessage ( stdClass $ item )
{
if ( $ item -> native instanceof Article) {
return $ item -> native -> getExcerpt ();
}
return null ;
}