mixedfeed

2025-12-07 0 650

mixedfeed

统治社交喂养的PHP库,将它们与魔术纠缠,一个PHP库来收集它们并在黑暗中束缚它们

  • 使用独立的Docker服务器
    • 可用的环境变量
  • 作为库安装
  • 结合进料
  • 使用进料而不是原始饲料
  • 饲料提供商
  • 修改缓存TTL
  • 创建自己的饲料提供商
    • 学说存储库中创建饲料提供商

使用独立的Docker服务器

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 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.ymldocker-compose.test.yml ,并在其中填写您的提供商凭据。然后执行docker-compose -f docker-compose.test.yml up -d --force-recreatemixedfeed将在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.*fa*ce*book.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

作为库安装

mixedfeed V3+至少需要PHP 7.2 ,检查服务器配置。

composer require rezozero/ 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 \\RZ\\ mixedfeed \\Canonical\\FeedItem objects
// for a better compatibility and easier templating with multiple
// social platforms.
return $feed->getAsyncCanonicalItems(12);\”>

 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 \\RZ\\ mixedfeed \\Canonical\\FeedItem objects
// for a better compatibility and easier templating with multiple
// social platforms.
return $ feed -> getAsyncCanonicalItems ( 12 );

结合进料

mixedfeed可以结合多个社交供稿,因此您可以循环循环它们,并使用一些常见的数据字段,例如feedItemPlatformnormalizedDatecanonicalMessagemixedfeed将通过降低normalizedDate来对所有提要项目进行排序,但是您可以将其配置为排序以上

mixedfeed ::ASC);\”>

 new mixedfeed ([…], mixedfeed :: ASC );

每个饲料提供商都必须在提要项目中注入这三个参数:

  • feedItemPlatform :这是您的社交网络名称,即字符串,即«twitter»。缓存提要和HTML模板引擎以正确渲染每个进料项目非常重要。

例如,如果您使用的是树枝,则可以为每个社交平台包含一个子网站。

mixedfeedItems %}
{% include ‘social-blocks/‘ ~ socialItem.feedItemPlatform ~ ‘.html.twig’ %}
{% endfor %}\”>

{% for socialItem in mixedfeed Items %}
{% include ‘social-blocks/‘ ~ socialItem . feedItemPlatform ~ ‘.html.twig’ %}
{% endfor %}
  • normalizedDate :这是一个关键参数,因为它允许mixedfeed喂养用异质结构对逆时态进行逆转表
  • canonicalMessage :这是一个有用的字段,其中包含所有平台上每个项目的文本内容。您可以使用它在简单的循环中显示项目文本。

使用进料而不是原始饲料

如果您需要再次将mixedfeed序列化为JSON或XML,则不应希望每个社交供稿项目中包含的所有原始数据。因此,您可以使用$feed->getAsyncCanonicalItems(12);方法不是getItems获得具有基本数据的更简洁的对象: RZ\\ mixedfeed \\Canonical\\FeedItem进料将提供这些领域:

  • ID string
  • 平台string
  • 作者string
  • 链接string
  • 标题string
  • 消息string
  • LeakeCount int|null
  • ShareCount int|null :分享,评论或转发计数,具体取决于平台。
  • 图像Image[]
    • URL string
    • 宽度integer
    • 高度integer
  • DateTime DateTime
  • 标签array (仅与MediumFeed一起使用)
  • 如果规范项目stdClass还不够

当FeffItem具有图像时, FeedItem::$images将容纳RZ\\ mixedfeed \\Canonical\\Image对象的阵列,如果可用的话,可以更好地访问其urlwidthheight

每个饲料提供商都必须实现如何从原始饲料覆盖createFeedItemFromObject()方法中进行进FeedItem水合

饲料提供商

饲料提供商课程 描述 feedItemPlatform
中型 通过https://*m*ed*ium.com/username/latest端点致电。它只需要一个$username和可选的$userId即可更好地一致性(介质似乎在更改查询参数后,即使在其用户名请求上都应用缓存,即邮政限制)。每个请求最多允许14个帖子。 medium
InstagramoembedFeed 致电https://api.in**s*tagram.com/oembed/ endpoint。它只需要$embedUrls阵列 instagram_oembed
GraphinstagramFeed 通过基本显示API致电graph.instagram.com/$userId/media端点。它需要$userId$accessToken警告:访问令牌必须每60天刷新一次,使用RefreshInstagramAccessToken instagram
Instagramfeed 弃用:呼叫/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.*faceboo**k.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

修改缓存TTL

AbstractFeedProvider继承的每个进纸产品都可以访问setTtl()方法,以修改默认的缓存时间。默认情况下,它设置为7200秒,因此您可以将其调整为无效的学说缓存或多或少。

创建自己的饲料提供商

互联网上有很多API,此工具将无法全部处理。但这不是问题,您可以轻松地在mixedfeed中创建自己的饲料提供商。您只需要创建一个新,该类将从RZ\\ mixedfeed \\AbstractFeedProvider继承。然后,您将必须从FeedProviderInterface实现一些方法:

  • getRequests($count = 5): \\Generator方法,将Guzzle Request生成器转换为响应。这是最佳选择,因为它将启用异步请求池
  • supportsRequestPool(): bool方法。如果您使用第三方库来获取数据(例如某些平台SDK),则应将其设置为false
  • createFeedItemFromObject($item)方法将原始的进料对象转换为规范的RZ\\ mixedfeed \\Canonical\\FeedItemRZ\\ mixedfeed \\Canonical\\Image
  • getDateTime方法在提要中查找关键的DateTime字段。
  • getFeed方法可以使用计数限制消耗API端点并照顾您的响应。此方法必须将您自己的饲料项目转换为\\stdClass对象,而不是数组。
  • getCanonicalMessage方法可以在提要项目中寻找重要的文本内容。
  • getFeedPlatform方法可以为您的提要项目获取全局文本标识符。
  • 然后,可以直接在mixedfeed初始化中使用的构造函数

随时检查我们现有的饲料提供商,以了解其工作原理。我们强烈建议您实施一个缓存系统,不要按每个请求调用API端点。默认情况下,我们使用具有许多存储选项的学说的缓存系统。

学说存储库中创建饲料提供商

如果您需要将社交网络供稿与自己的网站文章合并,则可以创建一个自定义的FeedProvider,将您的学说对象包裹在\\stdClass项目中。您需要使用EntityManager实现getFeed方法:

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;
}\”>

 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 ;
}

下载源码

通过命令行克隆项目:

git clone https://github.com/rezozero/mixedfeed.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 mixedfeed https://www.zuozi.net/31787.html

fcgi_responder
上一篇: fcgi_responder
forms angular
下一篇: forms angular
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务