ห้องสมุด 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 , mixtfeed จะมีให้ที่ http: // localhost: 8080
| ชื่อ | ค่าเริ่มต้น | หลายรายการ? (จุลภาคแยกออกจากกัน) |
|---|---|---|
| mf_cache_provider | อาร์เรย์ | |
| mf_feed_length | 12 | |
| mf_facebook_page_id | ||
| mf_facebook_access_token | ||
| mf_facebook_fields | จาก, ลิงก์, รูปภาพ, full_picture, ข้อความ, เรื่องราว, ประเภท, 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_extended_mode | 0 | |
| MF_YOUTUBE_PLAYLIST_ID | ||
| mf_youtube_api_key |
MixtFeed 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 ); MixtFeed สามารถรวมฟีดโซเชียลหลายตัวเพื่อให้คุณสามารถวนรอบและใช้ฟิลด์ข้อมูลทั่วไปบางอย่างเช่น feedItemPlatform , normalizedDate และ canonicalMessage MixtFeed จะจัดเรียงรายการฟีดทั้งหมดของคุณโดย ลดลงของ normalizedDate แต่คุณสามารถกำหนดค่าให้เรียง ลำดับจากน้อยไปมาก :
new MixedFeed ([…], MixedFeed:: ASC );ผู้ให้บริการฟีดแต่ละรายจะต้องฉีดพารามิเตอร์ทั้งสามนี้ในรายการฟีด:
feedItemPlatform : นี่คือชื่อเครือข่ายโซเชียลของคุณเป็น สตริง เช่น« Twitter » มันจะเป็นสิ่งสำคัญในการแคชฟีดของคุณและสำหรับเอ็นจิ้นเทมเพลต HTML ของคุณเพื่อแสดงผลอย่างถูกต้องแต่ละรายการฟีดตัวอย่างเช่นหากคุณใช้ กิ่งไม้ คุณจะสามารถรวมเทมเพลตย่อยสำหรับแต่ละแพลตฟอร์มสังคม
{% for socialItem in mixedFeedItems %}
{% include ‘social-blocks/‘ ~ socialItem . feedItemPlatform ~ ‘.html.twig’ %}
{% endfor %}normalizedDate : นี่เป็นพารามิเตอร์ที่สำคัญเนื่องจากช่วยให้ MixtFeed สามารถเรียง ลำดับฟีดหลายตัวที่มีโครงสร้างที่แตกต่างกันตามลำดับเวลาcanonicalMessage : นี่คือฟิลด์ที่มีประโยชน์ซึ่งมี เนื้อหาข้อความ สำหรับแต่ละรายการใน ทุก แพลตฟอร์ม คุณสามารถใช้สิ่งนี้เพื่อแสดงข้อความรายการภายในลูปง่าย ๆ หากคุณต้องการทำให้เป็นอนุกรมฟีดของคุณกับ JSON หรือ XML อีกครั้งคุณไม่ควรต้องการข้อมูลดิบทั้งหมดที่มีอยู่ในแต่ละรายการฟีดโซเชียล ดังนั้นคุณสามารถใช้ $feed->getAsyncCanonicalItems(12); วิธีการแทนที่จะเป็น getItems เพื่อรับวัตถุที่กระชับมากขึ้นด้วยข้อมูลที่จำเป็น: RZMixedFeedCanonicalFeedItem FeedItem จะจัดหาฟิลด์เหล่านี้:
string idstring แพลตฟอร์มstring ผู้แต่งstringstring ชื่อstring ข้อความint|nullint|null : แบ่งปันความคิดเห็นหรือการนับรีทวีตขึ้นอยู่กับแพลตฟอร์มImage[]string URLintegerinteger สูงDateTimearray (ใช้กับ MediumFeed เท่านั้น)stdClass ดิบเพื่อเข้าถึงวัตถุ RAW API หากฟิลด์รายการที่เป็นที่ยอมรับไม่เพียงพอ เมื่อ FeedItem มีรูปภาพ FeedItem::$images จะเก็บอาร์เรย์ของวัตถุ RZMixedFeedCanonicalImage เพื่อให้สามารถเข้าถึง url width และ height ได้ดีขึ้นหากมีอยู่
ผู้ให้บริการฟีดแต่ละรายจะต้องใช้วิธีการ ให้ความชุ่มชื้น FeedItem จากวิธีการที่ฟีดดิบเอาชนะ createFeedItemFromObject()
| คลาสผู้ให้บริการฟีด | คำอธิบาย | feedItemPlatform |
|---|---|---|
| การให้อาหารปานกลาง | โทรผ่าน https://medium.com/username/latest Endpoint มันต้องการเพียง $username และตัวเลือก $userId เพื่อความสอดคล้องที่ดีกว่าคำขอ (Medium ดูเหมือนจะใช้แคชกับคำขอชื่อผู้ใช้ของพวกเขาแม้หลังจากเปลี่ยนพารามิเตอร์การสืบค้นเช่นขีด จำกัด การโพสต์) ปานกลาง อนุญาตให้สูงสุด 14 โพสต์ต่อคำขอ | medium |
| Instagramoembedfeed | โทรหา https://api.instagram.com/oembed/ endpoint มันต้องการเพียง $embedUrls array | instagram_oembed |
| graphinstagramfeed | โทรผ่าน graph.instagram.com/$userId/media endpoint พร้อมจอแสดงผลพื้นฐาน API มันต้องการ $userId และ $accessToken คำเตือน : โทเค็นการเข้าถึงจะต้องรีเฟรชทุก 60 วันใช้ RefreshInstagramAccessToken | instagram |
เลิกใช้แล้ว : โทรผ่าน /v1/users/$userId/media/recent/ จุดสิ้นสุด ต้องการ $userId และ $accessToken | instagram | |
| ฟีด Twitter | โทรผ่าน 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 สาธารณะเท่านั้น หากต้องการเข้าชมการเข้าถึงแบบ token: https://developers.facebook.com/docs/facebook-login/access-tokens โดยค่าเริ่มต้น picture message story created_time ฟิลด์ status_type จะถูกสอบถามคุณสามารถเพิ่มของคุณเองได้โดยผ่าน $field อาร์เรย์เป็นพารามิเตอร์สุดท้าย คุณสามารถเพิ่มได้ since และ until พารามิเตอร์การสืบค้นโดยใช้ setSince(Datetime) และวิธี setUntil(Datetime) คุณสามารถเขียนทับค่าเริ่มต้น | facebook_page |
| pinterestboardfeed | โทรผ่าน /v1/boards/$boardId/pins/ endpoint มันต้องใช้ $boardId และ $accessToken หากต้องการเข้าชมการเข้าถึงแบบ token: https://developers.pinterest.com/tools/access_token/ | pinterest_board |
| GitHubreaseSfeed | โทรหา api.github.com/repos/:user/:repo/releases Endpoint มันต้องใช้ $repository ( ผู้ใช้/ที่เก็บ ) และ $accessToken คุณสามารถเพิ่มพารามิเตอร์ $page สุดท้าย หากต้องการเข้าชมการเข้าถึงแบบ token: https://github.com/settings/tokens | github_release |
| githubcommitsfeed | โทรหา api.github.com/repos/:user/:repo/commits ปลายทาง มันต้องใช้ $repository ( ผู้ใช้/ที่เก็บ ) และ $accessToken คุณสามารถเพิ่มพารามิเตอร์ $page สุดท้าย หากต้องการเข้าชมการเข้าถึงแบบ token: https://github.com/settings/tokens | github_commit |
| youtubemostpopularfeed | โทรผ่าน googleapis.com/youtube/v3/videos endpoint ด้วยแผนภูมิ mostPopular (เป็นตัวอย่างของฟีดมากกว่า) มันต้องใช้ $apiKey พร้อมบัญชี Google Cloud Console ที่ถูกต้อง (โดยไม่ได้เปิดใช้งานโควต้า NULL) และ YouTube Data API | youtube_playlist_items |
| youtubeplaylistitemfeed | โทรผ่าน googleapis.com/youtube/v3/playlistItems ปลายทาง มันต้องใช้ $apiKey พร้อมบัญชี Google Cloud Console ที่ถูกต้อง (โดยไม่ได้เปิดใช้งานโควต้า NULL) และ YouTube Data API | youtube_playlist_items |
ผู้ให้บริการฟีดแต่ละตัวที่สืบทอดมาจาก AbstractFeedProvider มีวิธีการเข้าถึงวิธี setTtl() เพื่อแก้ไขเวลาแคชเริ่มต้น โดยค่าเริ่มต้นจะถูกตั้งค่าเป็นเวลา 7200 วินาทีเพื่อให้คุณสามารถปรับให้เป็นแคชหลักคำสอนที่ทำให้ไม่บ่อยขึ้นได้บ่อยหรือน้อย
มี API มากมายบนอินเทอร์เน็ตและเครื่องมือนี้จะไม่สามารถจัดการได้ทั้งหมด แต่นี่ไม่ใช่ปัญหาคุณสามารถสร้างผู้ให้บริการฟีดของคุณเองใน MixtFeed ได้อย่างง่ายดาย คุณเพียงแค่ต้องสร้าง คลาส ใหม่ที่จะสืบทอดจาก RZMixedFeedAbstractFeedProvider จากนั้นคุณจะต้องใช้วิธีการบางอย่างจาก FeedProviderInterface :
getRequests($count = 5): Generator วิธีการส่งคืนเครื่องกำเนิดไฟฟ้า Request Guzzle ที่จะเปลี่ยนเป็นการตอบกลับ นี่เป็นตัวเลือกที่ดีที่สุดเพราะจะเปิดใช้ งานการร้องขอ AsyncsupportsRequestPool(): bool ควรกลับมาหากผู้ให้บริการของคุณสามารถรวมตัวกันเพื่อปรับปรุงประสิทธิภาพ หากคุณใช้ไลบรารีของบุคคลที่สามเพื่อดึงข้อมูลของคุณ (เช่นแพลตฟอร์ม SDK) คุณควรตั้งค่าเป็น falsecreateFeedItemFromObject($item) ซึ่งแปลงวัตถุฟีดดิบเป็น canonical RZMixedFeedCanonicalFeedItem และ RZMixedFeedCanonicalImagegetDateTime เพื่อค้นหาฟิลด์ DateTime ที่สำคัญในฟีดของคุณgetFeed ในการใช้จุดสิ้นสุด API ของคุณด้วยการนับจำนวนและดูแลการแคชคำตอบของคุณ วิธีนี้ จะต้องแปลงรายการฟีดของคุณเองเป็นวัตถุ stdClass ไม่ใช่อาร์เรย์getCanonicalMessage เพื่อค้นหาเนื้อหาข้อความสำคัญในรายการฟีดของคุณgetFeedPlatform เพื่อรับตัวระบุข้อความทั่วโลกสำหรับรายการฟีดของคุณอย่าลังเลที่จะตรวจสอบผู้ให้บริการฟีดที่มีอยู่ของเราเพื่อดูว่าพวกเขาทำงานอย่างไร และเราขอแนะนำให้คุณใช้ระบบแคชไม่ให้โทรหาจุดสิ้นสุด API ของคุณในแต่ละคำขอ โดยค่าเริ่มต้นเราใช้ระบบแคชของ หลักคำสอน ซึ่งมีตัวเลือกการจัดเก็บมากมาย
หากคุณต้องการรวมฟีดเครือข่ายโซเชียลเข้ากับบทความเว็บไซต์ของคุณเองคุณสามารถสร้าง FeedProvider ที่กำหนดเองซึ่งห่อหุ้มวัตถุหลักคำสอนของคุณลงในรายการ 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 ;
}