jahudka / libigfeed
嵌入网站中的Instagram流的后端库
Requires
- php: >=8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.4
Requires (Dev)
- mikey179/vfsstream: ^1.6
- nette/di: ^2.4
- phpunit/phpunit: ^9.5
README
一个使在您的网站上嵌入Instagram流变得稍微容易一些的库
此库封装了嵌入网站中的Instagram流所需的部分逻辑。提供适当的凭据后,它将从您的Instagram帐户获取最新帖子列表,然后您可以使用任何持久化层将其本地持久化。此外,您可以下载由帖子表示的媒体,以便进行进一步处理,例如生成响应式缩略图。
依赖项
- PHP >= 7.1 且需要
ext-json
guzzlehttp/guzzle
:^7.0.1
安装
composer require jahudka/libigfeed
使用方法
-
遵循 这些说明 创建一个新的Facebook应用程序,配置Instagram基本显示并将自己添加为测试用户。请为“有效的OAuth重定向URI”使用有意义的名称,您稍后会需要它。在步骤4(“验证测试用户”)处停止。
-
完成操作后,您需要找出您的Instagram应用程序ID和密钥。从您新应用程序的控制台选择侧边栏中的“产品”部分中的“Instagram基本显示/基本显示”。向下滚动一点,您就会找到它们。
-
将这些传递给
IgFeed\Lib\Client
类的构造函数,如下所示// create a HTTP client: $httpClient = new GuzzleHttp\Client(); // create an instance of the client: $client = new IgFeed\Lib\Client( $httpClient, $instagramAppId, $instagramAppSecret, $cacheDir . '/instagram.token' // the library will store the token // obtained during the OAuth authentication flow in this file );
-
您还需要设置步骤1中提到的OAuth身份验证端点。此端点需要执行的操作只是调用
$client->exchangeCodeForAccessToken($redirectUri, $code)
,其中$redirectUri
是端点的URL,$code
是Instagram从OAuth身份验证流程中的code
查询字符串参数返回的授权代码。 -
要实际触发OAuth身份验证流程,您需要转到特殊URL。通常您只需要偶尔这样做一次,因为访问令牌的有效期为60天,并且可以自动续期,库会为您完成。我通常是这样实现的
- 在网站的行政控制台中,我调用
$client->isConnected()
。 - 如果它返回
false
,我会显示一个带有到$client->getAuthorizationUrl($redirectUri)
链接的警告消息。
- 在网站的行政控制台中,我调用
-
当您成功验证了您的网站后,您可以使用
$client->getLatestMedia()
方法获取Instagram流的最新内容。该方法返回一个Generator
,其中包含IgFeed\Lib\Media
实例。此方法还会在后台自动刷新访问令牌,如果它距离过期时间不到24小时。想法是设置一个cron作业,每几个小时同步一次您的Instagram流的本地副本 - 这样,访问令牌应该可以在需要时安全地刷新,并且您的网站不应该因按需加载Instagram内容而变慢。您还可以使用
$client->download($media, $dst)
下载实际的媒体文件,这样您的网站就不依赖于它们从Instagram加载。
Nette应用程序中的使用
-
在您的
config.neon
中注册和配置IgFeed\Bridges\NetteDI\IgFeedExtension
extensions: igFeed: IgFeed\Bridges\NetteDI\IgFeedExtension # ... igFeed: httpClient: @myGuzzleClientService # optional clientId: '...' clientSecret: '...' tokenStoragePath: %tempDir%/instagram.token
-
让Nette DI完成其魔术,并根据需要将
IgFeed\Lib\Client
实例注入到您的演示者和服务中。 -
Prosper :-)