【问题标题】:Does Instagram Reels have an API for developers?Instagram Reels 是否有面向开发人员的 API?
【发布时间】:2020-11-28 01:24:20
【问题描述】:

我找不到与Instagram Reels 相关的API。有没有人知道有没有呢?

目前Facebook 开发者文档没有提到任何关于Instagram Reels 的内容。 https://developers.facebook.com/docs/instagram-api/overview/

【问题讨论】:

    标签: instagram instagram-api instagram-reels


    【解决方案1】:

    不确定,但我对 Instagram .ipa 文件进行了一些挖掘,发现了这些 url 方案参数。

    instagram://reels_home
    instagram://reels_share
    

    如果点击 ios,这两者都会带您进入卷轴供稿。我的意图是打开卷轴相机(或模式设置为卷轴的故事相机),但我想目前我们只能访问卷轴提要。

    【讨论】:

      【解决方案2】:

      卷轴是IG Media,类型为“VIDEO”。 如果您知道他的 Facebook 媒体 ID(不是来自 instagram 的媒体 ID),则可以获取单个“卷轴”

      如果卷轴像故事一样发布,您可以从stories endpoint(GET graph.facebook.com/{ig-user-id}/stories) 获取媒体列表。您将获得媒体 ID 数组。

        "data": [
          {
            "id": "{ig-media-id}"
          },
        ...
        ]
      }
      

      然后你可以从single media object endpoint(GET /{ig-media-id})获取信息

      所以目前你只能通过 api 获得卷轴,前提是它们发布了类似的故事。

      无论如何,某些国家/地区不支持卷轴,您只能从这些国家/地区的故事中看到卷轴。

      更新

      当您从business-discovery(GET {ig-user-id}?fields=business_discovery.username(instagramm_user_name){media{id,permalink,media_type,media_url}} 获取用户媒体时,也可以使用卷轴 ) 或user media (GET /{ig-user-id}/media)。

      如果媒体的永久链接看起来像 https://www.instagram.com/reel/... 和 media_type VIDEO,那么它是卷轴。

      【讨论】:

      • 请总结给定链接的内容。
      • 我可以获得直接卷轴音频页面吗?这个 API 的 URL 是什么,比如“instagram.com/reel...”
      【解决方案3】:

      Instagram API docs 的限制下,目前显示“不支持卷轴”。

      【讨论】:

        【解决方案4】:

        它们似乎在一开始就包含在GET /{ig-user-id}/mediaGET {ig-user-id}?fields=business_discovery.username(instagramm_user_name) 端点中,但后来又将它们删除了。根据docs,目前不支持它们。在此bug 报告中进一步确认。似乎这不是他们第一次包含不应该包含的节点(IGTV 和现在的卷轴)。

        【讨论】:

          【解决方案5】:

          有一种方法可以不使用任何 Instagram API 使用 javascript,通过使用该 JavaScript,您可以下载所有 Instagram Reels、帖子、视频。我使用这个 javascript 制作了Instagram Reels Downloader 网站

          const getMedia = () => {
            render.innerHTML = "<div class='image-placeholder'></div>";
            let url = _("input").value;
          
            if (url) {
              fetch(url)
                .then((r) => r.text())
                .then((r) => {
                  // render html
                  render.innerHTML = r;
                  // wait, find meta and create video or image
                  let w = setTimeout(() => {
                    let v = _('meta[property="og:video"]');
          
                    var x = document.getElementById("two");
                    if (x.style.display === "none") {
                      x.style.display = "block";
                    }
          
                    if (v) {
                      createVideo(v);
          
                    } else {
                      let img = _('meta[property="og:image"]');
                      if (img) {
                        createImg(img);
          
                      } else {
                        document.body.innerHTML = body;
                        alert("Error extracting Instagram image / video.");
                      }
                    }
                    clearTimeout(w);
                  }, 200);
                });
          
          
            } else {
              _("input").setAttribute(
                "placeholder",
                "Invalid address, use a proper Insagram link"
              );
            }
          };
          
          

          【讨论】:

          • 不幸的是,这似乎不起作用。您网站上的下载按钮会产生一些错误。请看一下控制台。
          【解决方案6】:

          呐,

          Instagram 尚未为 Reels 提供任何 API,因为许多国家/地区仍未提供 Reel 功能,但很快就会推出。

          那么问题来了,我们如何通过 API 获取卷轴数据?

          嗯,答案是你不能但是!如果你赞成这样做一些 scraping 的事情,那么答案肯定是肯定的!

          但是怎么做?

          我们都知道抓取需要付出很多努力,因为事情变化非常频繁。如果您不关心以下内容,可以使用示例 PHP 脚本以 JSON 格式获取 reels 数据。

          <?php
          
          //!IMPORTANT
          $sessionid = ["Cookie: sessionid=YOUR SESSION ID HERE"];
          
          // REELS SHORT CODE FROM URL
          $shortcode = null;
          
          $response = [];
          
          /**
           * Get a web file (HTML, XHTML, XML, image, etc.) from a URL.  Return an
           * array containing the HTTP server response header fields and content.
           */
          function get_web_page($url)
          {
              $user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0';
              $options    = array(
                  CURLOPT_CUSTOMREQUEST  => "GET",        //set request type post or get                            
                  CURLOPT_POST           => false,        //set to GET    
                  CURLOPT_USERAGENT      => $user_agent,  //set user agent                                    
                  # CURLOPT_COOKIEFILE   => "cookie.txt", //set cookie file                                     
                  # CURLOPT_COOKIEJAR    => "cookie.txt", //set cookie jar                                     
                  CURLOPT_HTTPHEADER     => $sessionid,   // sending manually set cookie                                   
                  CURLOPT_RETURNTRANSFER => true,         // return web page                                
                  CURLOPT_HEADER         => false,        // don't return headers                                
                  CURLOPT_FOLLOWLOCATION => true,         // follow redirects                                
                  CURLOPT_ENCODING       => "",           // handle all encodings                            
                  CURLOPT_AUTOREFERER    => true,         // set referer on redirect                                
                  CURLOPT_CONNECTTIMEOUT => 120,          // timeout on connect                            
                  CURLOPT_TIMEOUT        => 120,          // timeout on response                            
                  CURLOPT_MAXREDIRS      => 10,           // stop after 10 redirects                            
              );
              $ch = curl_init($url);
              curl_setopt_array($ch, $options);
              $content = curl_exec($ch);
              $err     = curl_errno($ch);
              $errmsg  = curl_error($ch);
              $header  = curl_getinfo($ch);
              curl_close($ch);
              $header['errno']   = $err;
              $header['errmsg']  = $errmsg;
              $header['content'] = $content;
              return $header;
          }
          
          if ((isset($_GET['q'])) && !empty($_GET['q'])) {
          
              $shortcode = $_GET['q'];
              $reels_url = "https://www.instagram.com/p/$shortcode/?__a=1";
          
              // read a web page and check for errors:
              $result = get_web_page($reels_url);
          
              if ($result['errno'] != 0) {
                  $response = json_encode(['error' => "bad url, timeout, redirect loop"]);
              }
          
              if ($result['http_code'] != 200) {
                  $response = json_encode(['error' => "no page, no permissions, no service"]);
              }
              
              if ($result['http_code'] === 200) {
                  $response = $result['content'];
              }
          
          }
          
          // JSON OUTPUT OR ERROR HERE
          header('Content-Type: application/json');
          echo $response;
          
          

          如何使用这个 PHP 脚本?

          将上述脚本保存在 PHP 文件中,例如fetch-reels.php 并像这样运行它 http://localhost/fetch-reels.php?q={SHORT-CODE}

          卷轴网址,例如

          1. https://www.instagram.com/p/COlKxQLAM11
          2. https://www.instagram.com/reel/COlKxQLAM11/?igshid=12f6j9a1dfx2x

          【讨论】:

            【解决方案7】:

            如前所述,Instagram 不提供直接 API,但您可以通过 Instagrapi 获得帮助,它非常棒且易于使用。 注意:这个 Instagram 私有 API 包装器是在 python 中的。 这是如何使用它 - 安装库:

            python -m pip install instagrapi
            

            代码

                from instagrapi import Client 
                cl = Client()
                #enter your username and password
                cl.login('username', 'password')
                #you can replace 10 with whatever amount of reels you want to fetch
                reel = cl.explore_reels(amount = 10)
                print(reel)
            

            就是这样!!!

            【讨论】:

              猜你喜欢
              • 2013-05-28
              • 1970-01-01
              • 2010-10-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多