统治社交喂养的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 ;
}