bda-matt/laravel-instagram-feed

这是基于 - https://github.com/Dymantic/laravel-instagram-feed - 的分支,增加了时间戳功能

v3.2.5 2021-01-12 16:25 UTC

README

Build Status

轻松地将您的Instagram流包含到项目中。

此包的目的是尽可能简单、用户友好,以便将Instagram流包含到项目中,使用Instagram的基本显示API。此包设计得尽可能使用缓存数据,并使用Laravel出色的调度功能按您选择的计划更新流。流本身也设计得具有弹性,因此您可以从控制器中安全地调用它,而不用担心网络错误会破坏页面。

安装

composer require BDA-Matt/laravel-instagram-feed

注意 您需要使用 ^v2.0,因为v1使用了已关闭的旧版Legacy API。

与v1版本的重大更改:现在,流仅包含媒体类型、媒体URL、标题、ID和永久链接的条目。此外,在完成身份验证流程时,令牌不再包含用户的完整名称或头像,因为基本显示API不提供这些信息。我愿意考虑单独抓取这些数据,但现在没有计划这样做。您还需要刷新您的令牌,这些令牌每60天过期。有关更多信息,请参阅以下内容。

教程

此项目的某些部分可能有些复杂,尤其是如果您不熟悉OAuth流程。我已包括教程,以尝试使事情更加清晰。非常欢迎反馈或改进意见。

开始之前

要使用Instagram基本显示API,您需要设置一个具有正确权限的Facebook应用程序。如果您还没有设置,请访问Facebook开发者文档并按照说明操作。

Instagram媒体的处理方式

Instagram通过此API提供三种媒体类型:图片、视频和轮播图。此包将其简化为仅包含图片和视频的流。如果您不想包含任何视频,可以使用ignore_video配置选项。对于轮播图项目,使用轮播图的第一项。如果忽略视频,则使用第一个图像,如果存在的话。

设置

使用php artisan vendor:publish发布必要的迁移和配置,然后使用php artisan migrate运行迁移。

配置

如上所述发布供应商资产将为您提供config/instagram-feed.php文件。在开始之前,您需要添加配置。文件中的注释解释了每个设置。

// config/instagram-feed.php

<?php

return [
    /*
     * The client_id from registering your app on Instagram
     */
    'client_id'           => 'YOUR INSTAGRAM CLIENT ID',

    /*
     * The client secret from registering your app on Instagram,
     * This is not the same as an access token.
     */
    'client_secret'       => 'YOUR INSTAGRAM CLIENT SECRET',

    /*
     * The route that will respond to the Instagram callback during the OAuth process.
     * Only enter the path without the leading slash. You need to ensure that you have registered
     * a redirect_uri for your instagram app that is equal to combining the
     *  app url (from config) and this route
     */
    'auth_callback_route' => 'instagram/auth/callback',

    /*
     * On success of the OAuth process you will be redirected to this route.
     * You may use query strings to carry messages
     */
    'success_redirect_to' => 'instagram-auth-success',

    /*
     * If the OAuth process fails for some reason you will be redirected to this route.
     * You may use query strings to carry messages
     */
    'failure_redirect_to' => 'instagram-auth-failure'

    /*
     * You may filter out video media types by setting this to true. Carousel media
     * will become the first image in the carousel, and if there are no images, then
     * the entire carousel will be ignored.
     */
     'ignore_video' => false,

    /*
     * You may set an email address below if you wish to be notified of errors when
     * attempting to refresh the Instagram feed.
     */
    'notify_on_error' => null,
];

个人资料

所有Instagram API调用现在都需要通过OAuth进行认证,因此你需要一个实体来关联生成的访问令牌。这个包提供了一个Dymantic\InstagramFeed\Profile模型来满足这一需求。该模型的实例需要一个用户名,这样你就可以用它来引用,而且你将通过这个模型来访问分配给该配置文件的Instagram流。你可能拥有多个配置文件,这意味着你可能拥有多个Instagram流。如何使用配置文件由你决定(例如与用户关联,或者只保留一个配置文件等)。

对于项目来说,只保留一个配置文件是一个相当常见的用例,因此这个包包含一个Artisan命令来快速创建配置文件,这样你就不需要为用户构建必要的UI。运行php artisan instagram-feed:profile {username}将创建一个具有该用户名的配置文件,你可以按需使用。

获取授权

一旦你有了配置文件,你可以在它上调用getInstagramAuthUrl()方法来获取一个链接,将此链接展示给用户以进行认证。当用户访问该链接时,他们可以授予你的应用程序访问权限(或不行)。如果一切顺利,用户将被重定向回你配置的路由。如果没有授予访问权限,你将被重定向到你配置的备用路由。如果你没有正确设置client_id和/或client_secret,或者你的Instagram应用程序不接受用户(因为你在沙箱模式下),Instagram将不会进行重定向,你的用户将看到Instagram的错误页面。

获取流

Profile::feed($limit = 20)

一旦你有一个认证过的配置文件,你可以在该配置文件上调用feed()方法。该方法第一次被调用时,将从Instagram获取流并将其永久缓存。随后的对feed()方法的调用将简单地从缓存中获取数据。可以安全地调用feed()方法而不必担心异常和错误,如果发生错误,你将只收到一个空集合。

设置限制和缓存

你可以通过将你的限制传递给feed方法来设置返回的媒体项的限制。所以如果你想要66的限制,你应该这样做:$profile->feed(66)。接受的范围是1到100。一旦你的流已被获取,它将被缓存,并且当未来的feed方法调用时将返回此结果。这意味着如果你想要增加你的限制,例如到88,你必须调用$profile->refreshFeed(88)

该流将是一个具有以下结构的Laravel集合

[
    'type' => 'image' // can be either image or video
    'url' => 'source url for media',
    'id' => 'the media id',
    'caption' => 'the media caption',
    'permalink' => 'the permalink for accessing the post'
]

更新流

Profile::refreshFeed($limit = 20)

显然,需要更新流,这正是配置文件实例上的refreshFeed()方法所做的事情。如果成功,该方法将返回与feed()方法相同类型的集合。然而,如果在发生(网络故障、无效令牌等)时发生异常,此方法将抛出异常。

此包包括一个Artisan命令php artisan instagram-feed:refresh,该命令将刷新所有授权的配置文件,并在发生错误时处理它们。如果你在配置中设置了电子邮件地址,错误情况下该地址将收到通知。建议使用Laravel的调度功能按需运行此命令。

刷新访问令牌

API的长寿命访问令牌在60天后过期。此包包括一个Artisan命令来处理此问题,你只需确保它至少每60天运行一次。该命令是php artisan instagram-feed:refresh-tokens