jahudka/libigfeed

嵌入网站中的Instagram流的后端库

v3.0.0 2022-08-25 15:56 UTC

This package is auto-updated.

Last update: 2024-09-25 20:51:42 UTC


README

一个使在您的网站上嵌入Instagram流变得稍微容易一些的库

此库封装了嵌入网站中的Instagram流所需的部分逻辑。提供适当的凭据后,它将从您的Instagram帐户获取最新帖子列表,然后您可以使用任何持久化层将其本地持久化。此外,您可以下载由帖子表示的媒体,以便进行进一步处理,例如生成响应式缩略图。

依赖项

  • PHP >= 7.1 且需要 ext-json
  • guzzlehttp/guzzle: ^7.0.1

安装

composer require jahudka/libigfeed

使用方法

  1. 遵循 这些说明 创建一个新的Facebook应用程序,配置Instagram基本显示并将自己添加为测试用户。请为“有效的OAuth重定向URI”使用有意义的名称,您稍后会需要它。在步骤4(“验证测试用户”)处停止。

  2. 完成操作后,您需要找出您的Instagram应用程序ID和密钥。从您新应用程序的控制台选择侧边栏中的“产品”部分中的“Instagram基本显示/基本显示”。向下滚动一点,您就会找到它们。

  3. 将这些传递给 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
    );
  4. 您还需要设置步骤1中提到的OAuth身份验证端点。此端点需要执行的操作只是调用 $client->exchangeCodeForAccessToken($redirectUri, $code),其中 $redirectUri 是端点的URL,$code 是Instagram从OAuth身份验证流程中的 code 查询字符串参数返回的授权代码。

  5. 要实际触发OAuth身份验证流程,您需要转到特殊URL。通常您只需要偶尔这样做一次,因为访问令牌的有效期为60天,并且可以自动续期,库会为您完成。我通常是这样实现的

    • 在网站的行政控制台中,我调用 $client->isConnected()
    • 如果它返回 false,我会显示一个带有到 $client->getAuthorizationUrl($redirectUri) 链接的警告消息。
  6. 当您成功验证了您的网站后,您可以使用 $client->getLatestMedia() 方法获取Instagram流的最新内容。该方法返回一个 Generator,其中包含 IgFeed\Lib\Media 实例。此方法还会在后台自动刷新访问令牌,如果它距离过期时间不到24小时。

    想法是设置一个cron作业,每几个小时同步一次您的Instagram流的本地副本 - 这样,访问令牌应该可以在需要时安全地刷新,并且您的网站不应该因按需加载Instagram内容而变慢。您还可以使用 $client->download($media, $dst) 下载实际的媒体文件,这样您的网站就不依赖于它们从Instagram加载。

Nette应用程序中的使用

  1. 在您的 config.neon 中注册和配置 IgFeed\Bridges\NetteDI\IgFeedExtension

    extensions:
        igFeed: IgFeed\Bridges\NetteDI\IgFeedExtension
        # ...
    
    igFeed:
        httpClient: @myGuzzleClientService  # optional
        clientId: '...'
        clientSecret: '...'
        tokenStoragePath: %tempDir%/instagram.token
  2. 让Nette DI完成其魔术,并根据需要将 IgFeed\Lib\Client 实例注入到您的演示者和服务中。

  3. Prosper :-)