【问题标题】:How to get images from my own Instagram with PHP?如何使用 PHP 从我自己的 Instagram 获取图像?
【发布时间】:2020-11-04 10:52:50
【问题描述】:

谁能告诉我如何通过 PHP 从我自己的 Instagram 获取图像?我有登录名、密码、应用程序 ID、应用程序密码。 IG 更改了 api,因此包括如何获取访问令牌在内的所有文档都不起作用。我有这样的代码和平:

$fb = new \Facebook\Facebook([
    'app_id' => self::APP_ID_IG,
    'app_secret' => self::APP_SECRET_IG,
    'default_graph_version' => 'v2.10',
]);

// This return string which creates access token as "app_id value|app_secret value"
$token = $fb->getApp()->getAccessToken();

// This line throws me an error: 
// Error validating application. Cannot get application info due to a system error.
$response = $fb->get('https://graph.instagram.com/me/media?fields=media_url,media_type', $token->getValue());

我迷失了。感谢您的帮助。

【问题讨论】:

    标签: php sdk instagram


    【解决方案1】:

    你应该看看Instagram's Media API

    此端点应该可以查询用户的媒体:GET /{ig-user-id}/media 为您提供媒体 ID 列表:

    {
      "data": [
        {
          "id": "17895695668004550"
        },
        {
          "id": "17899305451014820"
        },
        {
          "id": "17896450804038745"
        },
        {
          "id": "17881042411086627"
        },
        {
          "id": "17869102915168123"
        }
      ]
    }
    

    之后,我认为你应该使用图形 API 来获取每个媒体 ID 的图像 URL。

    【讨论】:

    • 如果没有登录怎么获取user-id?
    • 我找到了user-id,所以我要试试。
    • 不,它不起作用。每个对图形 api 的请求都需要访问令牌。还有这个。
    • 是的,这样不行吗? $response = $fb->get('https://graph.instagram.com/{user-id}/media', $token->getValue());
    • 您应该了解更多关于 oauth2 身份验证方法的信息。您不需要创建登录窗口。您应该只向最终用户显示 Facebook 生成的窗口,让他在特定范围内授权您的应用程序
    【解决方案2】:

    前段时间我创建了一个 vuejs 适配,也许这个代码结构 sn-p 可以帮助你,因为我现在没有时间将它翻译成 php,它是用 javascript 编写的,但 API 请求仍然存在相同(只需使用curl 而不是axios):https://gitlab.com/-/snippets/1957175

    一般步骤:

    1. Get your authorization code 通过登录窗口或 Facebook 应用程序(如下所述)

    2. Transform it into a shortterm access token

    curl --request POST \
      --url 'https://api.instagram.com/oauth/access_token?grant_type=authorization_code&client_id=[CLIENT_ID_HERE]&client_secret=[CLIENT_SECRET_HERE]&redirect_uri=[REDIRECT_URI_HERE]&code=[AUTHORIZATION_CODE_HERE]' \
      --header 'Content-Type: multipart/form-data' \
      --form client_id=[CLIENT_ID_HERE] \
      --form client_secret=[CLIENT_SECRET_HERE] \
      --form code=[AUTHORIZATION_CODE_HERE] \
      --form grant_type=authorization_code \
      --form redirect_uri=https://[REDIRECT_URI_HERE]/
    
    1. Transform that into a longterm access token
    GET https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=[SHORTTERM_ACCESS_TOKEN_HERE]&client_secret=[CLIENT_SECRET_HERE]
    
    1. 使用长期访问令牌作为授权,使用来自我的snippet 的 URL 查询 Media Graph 端点。
    2. 每 60 天刷新一次长期访问令牌 (see my answer on the topic on Github here)。您可以通过例如 CRON 完全自动化该步骤。
    GET https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token=[OLD_ACCESS_TOKEN_HERE]
    

    有关将哪个字段添加到查询的更多信息,请查看official facebook documentation


    通过 facebook 应用获取授权码:

    1. 登录您的facebook developer account
    2. 创建一个新的应用程序
    3. 在产品下,添加Instagram Basic Display 并填写所有必填字段

    1. Instagram Basic Display 产品的Basic Display 部分中,您将找到您的App IDSecret

    2. 您可以在下面输入您的redirect_uri

    1. 最后是用户令牌生成器,您可以使用它

    [...]为您的任何公共 Instagram 帐户快速生成长期存在的 Instagram 用户访问令牌。如果您 [...] 不想费心实施授权窗口 [...] See Instagram Basic Display API Docs

    ,这将非常有用
    1. 继续执行 3. 的一般步骤

    【讨论】:

    • 第一步说:要获得授权码,请在您的应用程序中实现授权窗口。在应用程序用户通过窗口验证其身份并授予您的应用程序所需的任何权限后,我们会将用户重定向到您的应用程序并包含授权代码..​​....我不想显示任何窗口。我是主人。我需要没有授权窗口的图片。服务器到服务器解决方案。
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多