bda-matt / laravel-instagram-feed
这是基于 - https://github.com/Dymantic/laravel-instagram-feed - 的分支,增加了时间戳功能
Requires
- guzzlehttp/guzzle: ^6.5 | ^7.0
Requires (Dev)
- orchestra/testbench: ^3.9
README
轻松地将您的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
。