Perpustakaan PHP untuk menguasai umpan sosial, untuk melibatkan mereka dengan sihir, perpustakaan PHP untuk mengumpulkan dan mengikat mereka dalam kegelapan
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
Atau gunakan docker-compose : Salin docker-compose.yml untuk docker-compose.test.yml dan isi kredensial penyedia Anda di dalamnya. Kemudian jalankan docker-compose -f docker-compose.test.yml up -d --force-recreate , MixedFeed akan tersedia di http: // localhost: 8080
| Nama | Nilai default | Banyak? (koma terpisah) |
|---|---|---|
| Mf_cache_provider | array | |
| Mf_feed_length | 12 | |
| Mf_facebook_page_id | ✅ | |
| Mf_facebook_access_token | ||
| Mf_facebook_fields | dari, tautan, gambar, full_picture, pesan, cerita, ketik, created_time, sumber, 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 | Gunakan urutan yang sama seperti di 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 |
MixedFeed V3+ membutuhkan setidaknya PHP 7.2 , periksa konfigurasi server Anda.
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 dapat menggabungkan beberapa umpan sosial sehingga Anda dapat mengulanginya dan menggunakan beberapa bidang data umum seperti feedItemPlatform , normalizedDate dan canonicalMessage . MixedFeed akan mengurutkan semua item umpan Anda dengan turun normalizedDate , tetapi Anda dapat mengonfigurasinya untuk menyortir :
new MixedFeed ([…], MixedFeed:: ASC );Setiap penyedia umpan harus menyuntikkan ketiga parameter ini dalam item umpan:
feedItemPlatform : Ini adalah nama jejaring sosial Anda sebagai string yaitu «twitter». Penting untuk menyimpan umpan Anda dan untuk mesin template HTML Anda untuk membuat dengan benar setiap item umpan.Misalnya, jika Anda menggunakan ranting , Anda akan dapat memasukkan sub-templat untuk setiap platform sosial.
{% for socialItem in mixedFeedItems %}
{% include ‘social-blocks/‘ ~ socialItem . feedItemPlatform ~ ‘.html.twig’ %}
{% endfor %}normalizedDate : Ini adalah parameter kritis karena memungkinkan MixedFeed untuk mengurutkan beberapa umpan secara kronologis dengan struktur heterogen.canonicalMessage : Ini adalah bidang yang berguna yang berisi konten teks untuk setiap item di semua platform. Anda dapat menggunakan ini untuk menampilkan teks item dalam lingkaran sederhana. Jika Anda perlu membuat serialisasi MixedFeed ke JSON atau XML lagi, Anda tidak ingin semua data mentah yang terkandung dalam setiap item umpan sosial. Jadi Anda dapat menggunakan $feed->getAsyncCanonicalItems(12); Metode alih -alih getItems untuk mendapatkan objek yang lebih ringkas dengan data penting: RZMixedFeedCanonicalFeedItem . FeedItem akan menyediakan bidang -bidang ini:
stringstring platformstring penulisstringstring judulstring pesanint|nullint|null : Bagikan, Komentar atau Hitungan Retweet tergantung pada platform.Image[]string urlintegerinteger TinggiDateTimearray Tag (hanya digunakan dengan MediumFeed )stdClass mentah untuk mengakses objek API mentah jika bidang item kanonik tidak cukup Ketika feedItem memiliki gambar, FeedItem::$images akan menampung RZMixedFeedCanonicalImage untuk memiliki akses yang lebih baik ke url , width dan height jika tersedia.
Setiap penyedia umpan harus menerapkan cara melembabkan FeedItem dari metode createFeedItemFromObject() pakan mentah.
| Kelas penyedia umpan | Keterangan | feedItemPlatform |
|---|---|---|
| Sedang menengah | Hubungi over https://medium.com/username/latest endpoint. Hanya perlu $username dan opsional $userId untuk konsistensi yang lebih baik daripada permintaan (medium tampaknya menerapkan cache pada permintaan nama pengguna mereka bahkan setelah mengubah parameter kueri, yaitu batas postingan). Medium memungkinkan maksimum 14 posting per permintaan. | medium |
| InstagramoembedFeed | Hubungi lebih dari https://api.instagram.com/oembed/ titik akhir. Hanya perlu array $embedUrls | instagram_oembed |
| GraphInstagramFeed | Hubungi lebih dari graph.instagram.com/$userId/media endpoint dengan API Tampilan Dasar. Perlu $userId dan $accessToken . Peringatan : Akses Token harus disegarkan setiap 60 hari, gunakan RefreshInstagramAccessToken | instagram |
Tercerahkan : Hubungi Over /v1/users/$userId/media/recent/ Endpoint. Itu membutuhkan $userId dan $accessToken | instagram | |
| Twitterfeed | Hubungi statuses/user_timeline Endpoint. Dibutuhkan $userId , $consumerKey , A $consumerSecret , $accessToken dan $accessTokenSecret . Hati -hati, titik akhir ini hanya dapat mengembalikan hingga 3.200 tweet terbaru pengguna , jumlah item Anda bisa lebih rendah dari yang diharapkan. Dengan cara yang sama, Twitter menghapus retweet setelah mengambil barang yang dihitung. | twitter |
| TwittersearchFeed | Hubungi Titik Akhir search/tweets . Dibutuhkan array $queryParams , $consumerKey , $consumerSecret , $accessToken dan $accessTokenSecret . Hati -hati, API Twitter tidak akan mengambil tweet lebih tua dari 7 hari , jumlah barang Anda bisa lebih rendah dari yang diharapkan. $queryParams harus menjadi array bernilai kunci dengan operator kueri sesuai dengan dokumentasi API Twitter. | twitter |
| FacebookPagefeed | Hubungi lebih dari https://graph.facebook.com/v3.3/$pageId/posts Endpoint dengan default. Titik akhir dapat diubah menggunakan parameter $apiBaseUrl . Ini membutuhkan $pageId dan $accessToken . Penyedia umpan ini hanya berfungsi untuk halaman Facebook publik. Untuk mendapatkan kunjungan yang diaktifkan akses: https://developers.facebook.com/docs/facebook-login/access-tokens. Secara default, picture , message , story , created_time , status_type bidang ditanya, Anda dapat menambahkan sendiri dengan melewati $field array sebagai parameter terakhir. Anda dapat menambahkan since dan until parameter kueri menggunakan metode setSince(Datetime) dan setUntil(Datetime) . Anda dapat menimpa default | facebook_page |
| Pinterestboardfeed | Hubungi over /v1/boards/$boardId/pins/ endpoint. Ini membutuhkan $boardId dan $accessToken . Untuk mendapatkan kunjungan yang diaktifkan akses: https://developers.pinterest.com/tools/access_token/ | pinterest_board |
| Githubreleasesfeed | Hubungi over api.github.com/repos/:user/:repo/releases endpoint. Ini membutuhkan $repository ( pengguna/repositori ) dan $accessToken . Anda dapat menambahkan parameter $page terakhir. Untuk mendapatkan kunjungan yang diaktifkan akses: https://github.com/settings/tokens | github_release |
| GithubCommitsFeed | Hubungi over api.github.com/repos/:user/:repo/commits Endpoint. Ini membutuhkan $repository ( pengguna/repositori ) dan $accessToken . Anda dapat menambahkan parameter $page terakhir. Untuk mendapatkan kunjungan yang diaktifkan akses: https://github.com/settings/tokens | github_commit |
| YouTubeMostpopularFeed | Hubungi over googleapis.com/youtube/v3/videos endpoint dengan mostPopular Chart (lebih baik feed contoh). Dibutuhkan $apiKey dengan akun Google Cloud Console yang valid (dengan bukan kuota null) dan API data YouTube diaktifkan. | youtube_playlist_items |
| Youtubeplaylistitemfeed | Hubungi googleapis.com/youtube/v3/playlistItems endpoint. Dibutuhkan $apiKey dengan akun Google Cloud Console yang valid (dengan bukan kuota null) dan API data YouTube diaktifkan. | youtube_playlist_items |
Setiap penyedia umpan yang mewarisi dari AbstractFeedProvider memiliki akses ke metode setTtl() untuk memodifikasi waktu cache default. Secara default diatur selama 7200 detik, sehingga Anda dapat menyesuaikannya untuk membatalkan cache doktrin lebih atau lebih jarang.
Ada banyak API di internet, dan alat ini tidak akan dapat menangani semuanya. Tapi ini bukan masalah, Anda dapat dengan mudah membuat penyedia umpan sendiri di MixedFeed . Anda hanya perlu membuat kelas baru yang akan mewarisi dari RZMixedFeedAbstractFeedProvider . Maka Anda harus mengimplementasikan beberapa metode dari FeedProviderInterface :
getRequests($count = 5): Generator yang Mengembalikan Generator Request Guzzle untuk diubah menjadi respons. Ini adalah opsi terbaik karena akan memungkinkan pengumpulan permintaan async .supportsRequestPool(): bool harus kembali jika penyedia Anda dapat dikumpulkan untuk meningkatkan kinerja. Jika Anda menggunakan pustaka pihak ketiga untuk mengambil data Anda (seperti beberapa platform SDK), Anda harus mengaturnya menjadi false .createFeedItemFromObject($item) yang mengubah objek umpan mentah menjadi Canonical RZMixedFeedCanonicalFeedItem dan RZMixedFeedCanonicalImagegetDateTime untuk mencari bidang datetime kritis di umpan Anda.getFeed Metode untuk mengkonsumsi titik akhir API Anda dengan batas penghitungan dan menjaga caching tanggapan Anda. Metode ini harus mengubah item umpan Anda sendiri menjadi objek stdClass , bukan array.getCanonicalMessage untuk mencari konten teks penting dalam item umpan Anda.getFeedPlatform untuk mendapatkan pengidentifikasi teks global untuk item umpan Anda.Jangan ragu untuk memeriksa penyedia pakan kami yang ada untuk melihat cara kerjanya. Dan kami sangat menyarankan Anda untuk mengimplementasikan sistem caching untuk tidak memanggil titik akhir API Anda di setiap permintaan. Secara default, kami menggunakan sistem caching Doctrine yang memiliki banyak opsi penyimpanan.
Jika Anda perlu menggabungkan umpan jejaring sosial dengan artikel situs web Anda sendiri, Anda dapat membuat FeedProvider khusus yang membungkus objek doktrin Anda menjadi item stdClass . Anda harus mengimplementasikan metode getFeed Anda menggunakan 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 ;
}Maka Anda dapat mendefinisikan metode pesan tanggal dan kanonik Anda untuk melihat ke dalam objek ini:
/**
* @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 ;
}