【发布时间】: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
我找不到与Instagram Reels 相关的API。有没有人知道有没有呢?
目前Facebook 开发者文档没有提到任何关于Instagram Reels 的内容。
https://developers.facebook.com/docs/instagram-api/overview/
【问题讨论】:
标签: instagram instagram-api instagram-reels
不确定,但我对 Instagram .ipa 文件进行了一些挖掘,发现了这些 url 方案参数。
instagram://reels_home
instagram://reels_share
如果点击 ios,这两者都会带您进入卷轴供稿。我的意图是打开卷轴相机(或模式设置为卷轴的故事相机),但我想目前我们只能访问卷轴提要。
【讨论】:
卷轴是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,那么它是卷轴。
【讨论】:
在Instagram API docs 的限制下,目前显示“不支持卷轴”。
【讨论】:
有一种方法可以不使用任何 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"
);
}
};
【讨论】:
呐,
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}
卷轴网址,例如
【讨论】:
如前所述,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)
就是这样!!!
【讨论】: