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에서 Mixedfeed가 제공됩니다.
| 이름 | 기본값 | 다수의? (쉼표 분리) |
|---|---|---|
| mf_cache_provider | 정렬 | |
| mf_feed_length | 12 | |
| mf_facebook_page_id | ✅ | |
| mf_facebook_access_token | ||
| mf_facebook_fields | From, Link, Picture, Full_Picture, 메시지, 스토리, 유형, create_time, source, status_type | ✅ |
| mf_facebook_endpoint | https://graph.facebook.com/v2.12/ | |
| MF_GRAPH_INSTAGRAM_USER_ID | ✅ | |
| MF_GRAPH_INSTAGRAM_ACCESS_TOKE | ✅ | |
| 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 |
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는 normalizedDate 를 내려 가서 모든 피드 품목을 정렬하지만 오름차순을 정렬하도록 구성 할 수 있습니다.
new MixedFeed ([…], MixedFeed:: ASC );각 피드 제공자는이 세 가지 매개 변수를 피드 항목에 주입해야합니다.
feedItemPlatform : 이것은 문자열 «트위터»로서의 소셜 네트워크 이름입니다. 피드를 캐시하고 HTML 템플릿 엔진이 각 피드 품목을 올바르게 렌더링하는 것이 중요합니다.예를 들어, Twig를 사용하는 경우 각 소셜 플랫폼에 대한 하위 템플릿을 포함시킬 수 있습니다.
{% for socialItem in mixedFeedItems %}
{% include ‘social-blocks/‘ ~ socialItem . feedItemPlatform ~ ‘.html.twig’ %}
{% endfor %}normalizedDate : 혼합 피드가 이종 구조와 역도적으로 여러 피드를 정렬 할 수있게하므로 중요한 매개 변수입니다.canonicalMessage : 이것은 모든 플랫폼에서 각 항목의 텍스트 내용을 포함하는 유용한 필드입니다. 이것을 사용하여 간단한 루프 내에 항목 텍스트를 표시 할 수 있습니다. Mixedfeed를 JSON 또는 XML로 다시 직렬화 해야하는 경우 각 소셜 피드 항목에 포함 된 모든 원시 데이터를 원하지 않아야합니다. 따라서 $feed->getAsyncCanonicalItems(12); RZMixedFeedCanonicalFeedItem 사용하여보다 간결한 객체를 얻는 getItems 방법 대신 방법. Feeditem은 다음 분야를 제공합니다.
stringstringstringstringstringstringint|nullint|null : 플랫폼에 따라 공유, 댓글 또는 리트 윗 계산.Image[]stringintegerintegerDateTimearray ( MediumFeed 과 함께 사용)stdClass FeedItem에 이미지가 있으면 FeedItem::$images RZMixedFeedCanonicalImage Objects의 배열을 보유하여 사용 가능한 경우 url , width 및 height 에 더 잘 액세스 할 수 있습니다.
각 피드 제공자는 생물 createFeedItemFromObject() 재정의하는 원시 피드에서 FeedItem 수화하는 방법을 구현해야합니다.
| 피드 제공자 클래스 | 설명 | feedItemPlatform |
|---|---|---|
| 중형 | https://medium.com/username/latest endpoint로 전화하십시오. 요청보다 더 나은 일관성을 위해 $username 과 선택적 $userId 만 있으면됩니다 (중간은 쿼리 매개 변수를 변경 한 후에도 사용자 이름 요청에 캐시를 적용하는 것으로 보입니다. 중간은 요청 당 최대 14 개의 게시물을 허용합니다. | medium |
| Instagramoembedfeed | https://api.instagram.com/oembed/ endpoint로 전화하십시오. $embedUrls 배열 만 있으면됩니다 | instagram_oembed |
| Graphinstagramfeed | 기본 디스플레이 API와 함께 graph.instagram.com/$userId/media ENDPOINT를 통화하십시오. $userId 와 $accessToken 필요합니다. 경고 : 액세스 토큰은 60 일마다 새로 RefreshInstagramAccessToken 해야합니다. | instagram |
감가 상각 : /v1/users/$userId/media/recent/ 엔드 포인트를 호출하십시오. $userId 와 $accessToken 필요합니다 | instagram | |
| 트위터 피드 | 통화 statuses/user_timeline endpoint를 호출하십시오. $userId , $consumerKey , $consumerSecret , $accessToken 및 $accessTokenSecret 필요합니다. 조심하십시오.이 엔드 포인트는 사용자의 가장 최근 트윗 중 3,200 명만 복귀 할 수 있습니다. 항목 수는 예상보다 적을 수 있습니다. 같은 방식으로 트위터는 품목 수를 검색 한 후 리트 윗을 제거합니다. | 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 endpoint를 통해 전화하십시오. $apiBaseUrl 매개 변수를 사용하여 엔드 포인트를 변경할 수 있습니다. $pageId 와 $accessToken 필요합니다. 이 피드 제공 업체는 공개 Facebook 페이지 에만 작동합니다. ac 기본적으로, picture , message , story , created_time , status_type 필드가 쿼리되므로 $field 배열을 마지막 매개 변수로 전달하여 직접 추가 할 수 있습니다. since setSince(Datetime) 및 setUntil(Datetime) 메소드를 사용 until 쿼리 매개 변수를 추가 할 수 있습니다. 기본값을 덮어 쓸 수 있습니다 | facebook_page |
| Pinterestboardfeed | 오버 /v1/boards/$boardId/pins/ endpoint를 호출하십시오. $boardId 와 $accessToken 필요합니다. Access-Token 방문 : https://developers.pinterest.com/tools/access_token/ | pinterest_board |
| githubreleasesfeed | api.github.com/repos/:user/:repo/releases endpoint를 통해 전화하십시오. $repository ( 사용자/리포지토리 )와 $accessToken 필요합니다. 마지막 $page 매개 변수를 추가 할 수 있습니다. access-token 방문 : https://github.com/settings/tokens | github_release |
| githubcommitsfeed | api.github.com/repos/:user/:repo/commits endpoint를 통해 전화하십시오. $repository ( 사용자/리포지토리 )와 $accessToken 필요합니다. 마지막 $page 매개 변수를 추가 할 수 있습니다. access-token 방문 : https://github.com/settings/tokens | github_commit |
| youtubemostpopularfeed | mostPopular 차트를 사용하여 googleapis.com/youtube/v3/videos endpoint를 통화하십시오 (예제 피드입니다). 유효한 Google Cloud Console 계정 (NULL 할당량 포함) 및 YouTube Data API가 활성화 된 $apiKey 필요합니다. | youtube_playlist_items |
| YouTubePlayListItemFeed | googleapis.com/youtube/v3/playlistItems endpoint로 전화하십시오. 유효한 Google Cloud Console 계정 (NULL 할당량 포함) 및 YouTube Data API가 활성화 된 $apiKey 필요합니다. | youtube_playlist_items |
AbstractFeedProvider 에서 상속되는 각 피드 제공자는 기본 캐시 시간을 수정하기 위해 setTtl() 메소드에 액세스 할 수 있습니다. 기본적으로 7200 초 동안 설정되므로 교리 캐시를 무효화하도록 조정할 수 있습니다.
인터넷에는 많은 API가 있으며이 도구는 모두 처리 할 수 없습니다. 그러나 이것은 문제가되지 않습니다. 혼합 피드 에서 자신의 피드 제공 업체를 쉽게 만들 수 있습니다. RZMixedFeedAbstractFeedProvider 에서 상속 될 새로운 클래스를 만들면됩니다. 그런 다음 FeedProviderInterface 에서 몇 가지 방법을 구현해야합니다.
getRequests($count = 5): Generator guzze Request 생성기를 반환하여 응답으로 변환하는 생성기 메소드. Async 요청 풀링을 활성화 할 수있는 최상의 옵션입니다.supportsRequestPool(): bool Method가 반환해야합니다. 타사 라이브러리를 사용하여 데이터를 가져 오는 경우 (일부 플랫폼 SDK와 같은) 데이터를 false 로 설정해야합니다.RZMixedFeedCanonicalFeedItem 및 RZMixedFeedCanonicalImage 로 변환하는 createFeedItemFromObject($item) 메소드getDateTime 방법.getFeed 메소드 카운트 한계로 API 엔드 포인트를 소비하고 응답을 캐싱하는 것을 관리하십시오. 이 방법은 자신의 피드 항목을 배열이 아닌 stdClass 객체로 변환해야합니다.getCanonicalMessage 메소드 피드 항목에서 중요한 텍스트 내용을 찾으십시오.getFeedPlatform 메소드 피드 항목에 대한 전역 텍스트 식별자를 얻으십시오.기존 피드 제공 업체가 어떻게 작동하는지 확인하십시오. 또한 각 요청마다 API 엔드 포인트를 호출하지 않도록 캐싱 시스템을 구현하는 것이 좋습니다. 기본적으로, 우리는 많은 스토리지 옵션이있는 교리 의 캐싱 시스템을 사용합니다.
소셜 네트워크 피드를 자신의 웹 사이트 기사와 병합 해야하는 경우, 교리 개체를 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 ;
}