統治社交餵養的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 :複製docker-compose.yml到docker-compose.test.yml ,並在其中填寫您的提供商憑據。然後執行docker-compose -f docker-compose.test.yml up -d --force-recreate , mixhfeed將在http:// localhost上提供:8080
| 姓名 | 預設值 | 多種的? (逗號分開) |
|---|---|---|
| MF_CACHE_PROVIDER | 大批 | |
| mf_feed_length | 12 | |
| mf_facebook_page_id | ✅ | |
| mf_facebook_access_token | ||
| mf_facebook_fields | 來自,鏈接,圖片,full_picture,消息,故事,類型,創建_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_releases_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_EXTEDDEND_MODE | 0 | |
| mf_youtube_playlist_id | ✅ | |
| mf_youtube_api_key |
Mixhfeed V3+至少需要PHP 7.2 ,檢查服務器配置。
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 );混合飼料可以結合多個社交供稿,因此您可以循環循環它們,並使用一些常見的數據字段,例如feedItemPlatform , normalizedDate和canonicalMessage 。 Mixhfeed將通過降低normalizedDate來對所有提要項目進行排序,但是您可以將其配置為排序以上:
new MixedFeed ([…], MixedFeed:: ASC );每個飼料提供商都必須在提要項目中註入這三個參數:
feedItemPlatform :這是您的社交網絡名稱,即字符串,即«twitter»。緩存提要和HTML模板引擎以正確渲染每個進料項目非常重要。例如,如果您使用的是樹枝,則可以為每個社交平台包含一個子網站。
{% for socialItem in mixedFeedItems %}
{% include ‘social-blocks/‘ ~ socialItem . feedItemPlatform ~ ‘.html.twig’ %}
{% endfor %}normalizedDate :這是一個關鍵參數,因為它允許混合餵養用異質結構對逆時態進行逆轉表。canonicalMessage :這是一個有用的字段,其中包含所有平台上每個項目的文本內容。您可以使用它在簡單的循環中顯示項目文本。 如果您需要再次將混合饋送序列化為JSON或XML,則不應希望每個社交供稿項目中包含的所有原始數據。因此,您可以使用$feed->getAsyncCanonicalItems(12);方法不是getItems獲得具有基本數據的更簡潔的對象: RZMixedFeedCanonicalFeedItem 。進料將提供這些領域:
stringstringstringstringstringstringint|nullint|null :分享,評論或轉發計數,具體取決於平台。Image[]stringintegerintegerDateTimearray (僅與MediumFeed一起使用)stdClass還不夠當FeffItem具有圖像時, FeedItem::$images將容納RZMixedFeedCanonicalImage對象的陣列,如果可用的話,可以更好地訪問其url , width和height 。
每個飼料提供商都必須實現如何從原始飼料覆蓋createFeedItemFromObject()方法中進行進FeedItem水合。
| 飼料提供商課程 | 描述 | feedItemPlatform |
|---|---|---|
| 中型 | 通過https://medium.com/username/latest端點致電。它只需要一個$username和可選的$userId即可更好地一致性(介質似乎在更改查詢參數後,即使在其用戶名請求上都應用緩存,即郵政限制)。每個請求最多允許14個帖子。 | medium |
| InstagramoembedFeed | 致電https://api.instagram.com/oembed/ endpoint。它只需要$embedUrls陣列 | instagram_oembed |
| GraphinstagramFeed | 通過基本顯示API致電graph.instagram.com/$userId/media端點。它需要$userId和$accessToken 。警告:訪問令牌必須每60天刷新一次,使用RefreshInstagramAccessToken | instagram |
棄用:呼叫/v1/users/$userId/media/recent/端點。它需要$userId和$accessToken | instagram | |
| Twitterfeed | 調用statuses/user_timeline端點。它需要一個$userId , $consumerKey ,a $consumerSecret , $accessToken和$accessTokenSecret 。請小心,此端點最多只能返回3,200個用戶最近的推文,您的項目數量可能比預期的要小。以同樣的方式,Twitter在檢索項目計數後刪除了轉發。 | twitter |
| TwittersearchFeed | 致電search/tweets端點。它需要一個$queryParams陣列, $consumerKey ,a $consumerSecret , $accessToken和$accessTokenSecret 。請小心,Twitter API不會檢索比7天大的推文,您的物品數量可能比預期的要小。根據Twitter API文檔, $queryParams必須是帶有查詢操作員的鍵值值陣列。 | twitter |
| FacebookpageFeed | 通過https://graph.facebook.com/v3.3/$pageId/posts eendpoint in默認情況下致電。可以使用$apiBaseUrl參數更改端點。它需要$pageId和$accessToken 。該飼料提供商僅適用於公共Facebook頁面。要獲取訪問訪問:https://developers.facebook.com/docs/facebook-login/access-tokens。默認情況下,查詢了status_type字段,您可以通過將$field picture作為最後created_time message story status_type字段。您可以使用setSince(Datetime)和setUntil(Datetime)方法來添加和until查詢參數since 。您可以覆蓋默認值 | facebook_page |
| PinterestboardFeed | 致電/v1/boards/$boardId/pins/ endpoint。它需要$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 | 通過mostPopular圖表撥打googleapis.com/youtube/v3/videos端點(這是一個示例提要)。它需要有一個有效的Google Cloud Console帳戶(不帶空配額)的$apiKey ,並啟用了YouTube數據API 。 | youtube_playlist_items |
| YouTubePlayListItemFeed | 致電googleapis.com/youtube/v3/playlistItems端點。它需要有一個有效的Google Cloud Console帳戶(不帶空配額)的$apiKey ,並啟用了YouTube數據API 。 | youtube_playlist_items |
從AbstractFeedProvider繼承的每個進紙產品都可以訪問setTtl()方法,以修改默認的緩存時間。默認情況下,它設置為7200秒,因此您可以將其調整為無效的學說緩存或多或少。
互聯網上有很多API,此工具將無法全部處理。但這不是問題,您可以輕鬆地在Mixhfeed中創建自己的飼料提供商。您只需要創建一個新類,該類將從RZMixedFeedAbstractFeedProvider繼承。然後,您將必須從FeedProviderInterface實現一些方法:
getRequests($count = 5): Generator方法,將Guzzle Request生成器轉換為響應。這是最佳選擇,因為它將啟用異步請求池。supportsRequestPool(): bool方法。如果您使用第三方庫來獲取數據(例如某些平台SDK),則應將其設置為false 。createFeedItemFromObject($item)方法將原始的進料對象轉換為規範的RZMixedFeedCanonicalFeedItem和RZMixedFeedCanonicalImagegetDateTime方法在提要中查找關鍵的DateTime字段。getFeed方法可以使用計數限制消耗API端點並照顧您的響應。此方法必須將您自己的飼料項目轉換為stdClass對象,而不是數組。getCanonicalMessage方法可以在提要項目中尋找重要的文本內容。getFeedPlatform方法可以為您的提要項目獲取全局文本標識符。隨時檢查我們現有的飼料提供商,以了解其工作原理。我們強烈建議您實施一個緩存系統,不要按每個請求調用API端點。默認情況下,我們使用具有許多存儲選項的學說的緩存系統。
如果您需要將社交網絡供稿與自己的網站文章合併,則可以創建一個自定義的FeedProvider,將您的學說對象包裹在stdClass項目中。您需要使用EntityManager實現getFeed方法:
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 ;
}