ソーシャルフィードを支配するPHPライブラリ、魔法、PHPライブラリを集めて暗闇の中で結合する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を実行すると、http:// localhost:8080でミックスフィードが入手できます。
| 名前 | デフォルト値 | 複数? (コンマ分離) |
|---|---|---|
| MF_CACHE_PROVIDER | 配列 | |
| MF_FEED_LENGTH | 12 | |
| mf_facebook_page_id | ✅ | |
| mf_facebook_access_token | ||
| mf_facebook_fields | from、link、picture、full_picture、message、story、type、created_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_EXTEDED_MODE | 0 | |
| mf_youtube_playlist_id | ✅ | |
| mf_youtube_api_key |
MixedFeed 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 );MixedFeedは複数のソーシャルフィードを組み合わせることができるため、それらの上にループして、 feedItemPlatform 、 normalizedDate 、 canonicalMessageなどの一般的なデータフィールドを使用できます。 MixedFeedは、すべてのフィードアイテムをSurcedending normalizedDateによってソートしますが、昇順をソートするように構成できます。
new MixedFeed ([…], MixedFeed:: ASC );各フィードプロバイダーは、これらの3つのパラメーターをフィードアイテムに挿入する必要があります。
feedItemPlatform :これは、文字列としてのソーシャルネットワーク名です。つまり、«Twitter»です。フィードをキャッシュし、HTMLテンプレートエンジンが各フィードアイテムを適切にレンダリングすることが重要です。たとえば、 Twigを使用している場合、ソーシャルプラットフォームごとにサブテンプレートを含めることができます。
{% for socialItem in mixedFeedItems %}
{% include ‘social-blocks/‘ ~ socialItem . feedItemPlatform ~ ‘.html.twig’ %}
{% endfor %}normalizedDate :これは、混合フィードが異種構造を使用して逆逆合数フィードを並べ替えることができるため、重要なパラメーターです。canonicalMessage :これは、すべてのプラットフォームにおける各アイテムのテキストコンテンツを含む便利なフィールドです。これを使用して、単純なループ内にアイテムテキストを表示できます。 MixedFeedをJSONまたはXMLに再度シリアル化する必要がある場合は、各ソーシャルフィードアイテムに含まれるすべての生データを必要としないでください。したがって、 $feed->getAsyncCanonicalItems(12); getItemsの代わりに、本質的なデータを使用してより簡潔なオブジェクトを取得する方法: RZMixedFeedCanonicalFeedItem 。 feeditemはこれらのフィールドを提供します:
stringstringstringstringstringstringint|nullint|null :プラットフォームに応じて共有、コメント、またはリツイートカウント。Image[]stringintegerintegerDateTimearray ( MediumFeedでのみ使用)stdClass CLANONICALアイテムフィールドが十分でない場合にRAW APIオブジェクトにアクセスするFeedItemに画像がある場合、 FeedItem::$images RZMixedFeedCanonicalImageオブジェクトの配列が保持され、利用可能な場合、 url 、 width 、 heightへのアクセスを改善します。
各フィードプロバイダーはcreateFeedItemFromObject()メソッドをオーバーライドする生の供給からFeedItemを水分補給する方法を実装する必要があります。
| フィードプロバイダークラス | 説明 | feedItemPlatform |
|---|---|---|
| ミディアムフィード | https://medium.com/username/latest endpointに電話してください。リクエストよりも一貫性を向上させるために、 $usernameとオプションの$userIdのみが必要です(クエリパラメーター、つまり投稿制限を変更した後でも、ユーザー名の要求にキャッシュを適用するようです)。 Mediumを使用すると、リクエストごとに最大14の投稿が可能になります。 | medium |
| InstagramOembedFeed | https://api.instagram.com/oembed/ endpointに電話してください。 $embedUrlsアレイのみが必要です | instagram_oembed |
| graphinstagramfeed | graph.instagram.com/$userId/mediaエンドポイントを基本的なディスプレイAPIで呼び出します。 $userIdと$accessToken必要です。警告:アクセストークンは60日ごとにRefreshInstagramAccessTokenする必要があります。 | instagram |
非推奨:call over /v1/users/$userId/media/recent/ endpoint。 $userIdと$accessToken必要です | instagram | |
| TwitterFeed | statuses/user_timelineエンドポイントを呼び出します。 $userId 、 $consumerKey 、 $consumerSecret 、 $accessToken 、 $accessTokenSecretが必要です。このエンドポイントは、ユーザーの最新のツイートの最大3,200個のみを返すことができます。アイテム数は予想よりも少ない可能性があります。同様に、Twitterはアイテムのカウントを取得した後、リツイートを削除します。 | twitter |
| twittersearchFeed | search/tweetsエンドポイントを呼び出します。 $queryParamsアレイ、 $consumerKey 、 $consumerSecret 、 $accessToken 、 $accessTokenSecretが必要です。注意してください、Twitter APIは7日以上古いツイートを取得しません。アイテム数は予想よりも少ない可能性があります。 $queryParams 、Twitter APIドキュメントに従って、クエリ演算子を備えたキー値の配列でなければなりません。 | 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 、 status_typeフィールドがクエリされています。 $field配列を最後のパラメーターとして渡すことで独自に追加できます。 setSince(Datetime)およびsetUntil(Datetime)メソッドを使用して、クエリパラメーターを追加since untilできます。デフォルトを上書きすることができます | 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 | googleapis.com/youtube/v3/videosのmostPopularポイントに電話してください。有効なGoogle Cloud Consoleアカウント(null quotaではない)を備えた$apiKeyとYouTubeデータAPIが有効になっています。 | youtube_playlist_items |
| YouTubePlayListitemFeed | googleapis.com/youtube/v3/playlistItemsエンドポイントに電話してください。有効なGoogle Cloud Consoleアカウント(null quotaではない)を備えた$apiKeyとYouTubeデータAPIが有効になっています。 | youtube_playlist_items |
AbstractFeedProviderから継承する各フィードプロバイダーは、デフォルトのキャッシュ時間を変更するためにsetTtl()メソッドにアクセスできます。デフォルトでは7200秒間設定されているため、調整して、教義キャッシュを多かれ少なかれ頻繁に無効にすることができます。
インターネットにはたくさんのAPIがあり、このツールはそれらすべてを処理することができません。しかし、これは問題ではありません。ミクストフィードで独自のフィードプロバイダーを簡単に作成できます。 RZMixedFeedAbstractFeedProviderから継承する新しいクラスを作成する必要があります。その後、 FeedProviderInterfaceからいくつかのメソッドを実装する必要があります。
getRequests($count = 5): GeneratorメソッドガズルRequestジェネレーターを返して応答に変換します。これは、非同期リクエストプーリングを可能にするため、最良のオプションです。supportsRequestPool(): boolメソッドを返す必要があります。サードパーティライブラリを使用してデータ(一部のプラットフォームSDKなど)を取得している場合は、 falseに設定する必要があります。createFeedItemFromObject($item)メソッド生のフィードオブジェクトを標準的なRZMixedFeedCanonicalFeedItemおよびRZMixedFeedCanonicalImageに変換するメソッドgetDateTimeメソッドフィード内の重要なデータタイムフィールドを探す方法。getFeedメソッドカウント制限でAPIエンドポイントを消費し、応答をキャッシュすることに注意してください。この方法は、自分のフィードアイテムを配列ではなくstdClassオブジェクトに変換する必要があります。getCanonicalMessageメソッドフィードアイテムの重要なテキストコンテンツを探す方法。getFeedPlatformメソッドフィードアイテムのグローバルテキスト識別子を取得します。既存の飼料プロバイダーがどのように機能するかを確認してください。また、各リクエストでAPIエンドポイントを呼び出さないようにキャッシュシステムを実装することを強くお勧めします。デフォルトでは、多くのストレージオプションがあるDoctrineのキャッシュシステムを使用しています。
ソーシャルネットワークフィードを独自のWebサイト記事とマージする必要がある場合は、ドクトリンオブジェクトを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 ;
}