我正在寻找已上传的Instagram图片的MediaID
。它应该看起来像
1234567894561231236_33215652
我发现最后一组整数是usersID
例如:这是图片的直接链接,但我看不到格式正确的mediaID
?
http://distilleryimage11.ak.instagram.com/d33aafc8b55d11e2a66b22000a9f09de_7.jpg
虽然这是链接
http://instagram.com/p/Y7GF-5vftL/
我不希望使用API,因为我需要所选图像中的MediaID。
答案 0 :(得分:78)
http://api.instagram.com/oembed?url=http://instagram.com/p/Y7GF-5vftL/
渲染为json对象,您可以轻松地从中提取媒体ID ---
例如,在PHP中
$api = file_get_contents("http://api.instagram.com/oembed?url=http://instagram.com/p/Y7GF-5vftL/");
$apiObj = json_decode($api,true);
$media_id = $apiObj['media_id'];
例如,在JS
中$.ajax({
type: 'GET',
url: 'http://api.instagram.com/oembed?callback=&url=http://instagram.com/p/Y7GF-5vftL/',
cache: false,
dataType: 'jsonp',
success: function(data) {
try{
var media_id = data[0].media_id;
}catch(err){}
}
});
答案 1 :(得分:15)
所以最受欢迎的" Better Way" 有点折旧,所以这是我的编辑和其他解决方案:
Javascript + jQuery
$.ajax({
type: 'GET',
url: 'http://api.instagram.com/oembed?callback=&url='+Url, //You must define 'Url' for yourself
cache: false,
dataType: 'json',
jsonp: false,
success: function (data) {
var MediaID = data.media_id;
}
});
<强> PHP 强>
$your_url = "" //Input your url
$api = file_get_contents("http://api.instagram.com/oembed?callback=&url=" . your_url);
$media_id = json_decode($api,true)['media_id'];
所以,这只是@ George代码的更新版本,目前正在运行。但是,我做了其他解决方案,有些甚至避免了ajax请求:
对Ajax解决方案进行短代码
某些Instagram网址使用缩短的网址语法。如果请求正确,客户端只需使用短代码代替媒体ID。
示例短代码网址如下所示:https://www.instagram.com/p/Y7GF-5vftL/
Y7GF-5vftL
是图片的短代码。
使用Regexp:
var url = "https://www.instagram.com/p/Y7GF-5vftL/"; //Define this yourself
var Key = /p\/(.*?)\/$/.exec(url)[1];
在同一范围内,Key
将包含您的短代码。现在请使用此短代码请求低分辨率图片,您可以执行以下操作:
$.ajax({
type: "GET",
dataType: "json",
url: "https://api.instagram.com/v1/media/shortcode/" + Key + "?access_token=" + access_token, //Define your 'access_token'
success: function (RawData) {
var LowResURL = RawData.data.images.low_resolution.url;
}
});
返回的RawData结构中还有许多其他有用的信息,包括媒体ID。记录它或查看api文档以查看。
短代码转换解决方案
您可以相当轻松地将短代码转换为ID!这是在javascript中执行此操作的简单方法:
function shortcodeToInstaID(Shortcode) {
var char;
var id = 0;
var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
for (var i = 0; i < Shortcode.length; i++) {
char = Shortcode[i];
id = (id * 64) + alphabet.indexOf(char);
}
return id;
}
注意:如果您想要一个更强大的node.js解决方案,或者想要了解如何将其转换回来,请查看@Slang&#39; module on npm。
整页解决方案
那么,如果您拥有完整Instagram页面的URL,例如:https://www.instagram.com/p/BAYYJBwi0Tssh605CJP2bmSuRpm_Jt7V_S8q9A0/
,那该怎么办?好吧,您实际上可以阅读HTML以查找包含媒体ID的元属性。您还可以在URL本身上执行其他几种算法来获取它,但我认为这需要付出太多努力,因此我们会保持简单。 query the meta tag al:ios:url
或迭代html。由于阅读元标记已全部发布,我将向您展示如何迭代。
注意:这有点不稳定,容易被修补。此方法不适用于使用预览框的页面。因此,如果您在某个人的个人资料中点击图片时给它当前的HTML,这将会中断并返回错误的媒体ID。
function getMediaId(HTML_String) {
var MediaID = "";
var e = HTML_String.indexOf("al:ios:url") + 42; //HTML_String is a variable that contains all of the HTML text as a string for the current document. There are many different ways to retrieve this so look one up.
for (var i = e; i <= e + 100; i++) { //100 should never come close to being reached
if (request.source.charAt(i) == "\"")
break;
MediaID += request.source.charAt(i);
}
return MediaID;
}
然后你去了,使用Instagram的api获取媒体ID的一系列不同方法。希望能解决你的困境。
答案 2 :(得分:13)
没有API调用!我将media_id
转换为shortcode
作为额外奖励。
基于slang's amazing work来确定转换。 Nathan's work将base10转换为php中的base64。并rgbflawed's work将其转换回另一种方式(使用修改过的字母表)。 #teameffort
function mediaid_to_shortcode($mediaid){
if(strpos($mediaid, '_') !== false){
$pieces = explode('_', $mediaid);
$mediaid = $pieces[0];
$userid = $pieces[1];
}
$alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
$shortcode = '';
while($mediaid > 0){
$remainder = $mediaid % 64;
$mediaid = ($mediaid-$remainder) / 64;
$shortcode = $alphabet{$remainder} . $shortcode;
};
return $shortcode;
}
function shortcode_to_mediaid($shortcode){
$alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
$mediaid = 0;
foreach(str_split($shortcode) as $letter) {
$mediaid = ($mediaid*64) + strpos($alphabet, $letter);
}
return $mediaid;
}
答案 3 :(得分:11)
您实际上可以使用我在此处编写的方法http://carrot.is/coding/instagram-ids从算法上从链接的最后一段派生MediaId。它通过按字符代码映射URL段来实现。将id转换为base 64号码。
例如,根据您提到的链接(http://instagram.com/p/Y7GF-5vftL),我们会得到最后一段(Y7GF-5vftL
),然后使用base64 url-safe alphabet将其映射为字符代码(24:59:6:5:62:57:47:31:45:11_64
})。接下来,我们将此base64数字转换为base10(448979387270691659
)。
如果您在_
之后附加userId,则会在您指定的表单中获得完整ID,但由于MediaId在没有userId的情况下是唯一的,因此您实际上可以从大多数请求中省略userId。
最后,我创建了一个名为instagram-id-to-url-segment的Node.js模块来自动执行此转换:
convert = require('instagram-id-to-url-segment');
instagramIdToUrlSegment = convert.instagramIdToUrlSegment;
urlSegmentToInstagramId = convert.urlSegmentToInstagramId;
instagramIdToUrlSegment('448979387270691659'); // Y7GF-5vftL
urlSegmentToInstagramId('Y7GF-5vftL'); // 448979387270691659
答案 4 :(得分:8)
尝试此问题的解决方案: How can I get an direct Instagram link from a twitter entity?
您可以通过将/ media /附加到网址来获取图片。使用
您甚至可以指定尺寸
t(缩略图),m(中),l(大)中的一个。默认为m。
答案 5 :(得分:6)
您的媒体ID是:448979387270691659_45818965
这是如何获得它。
photo448979387270691659_45818965
应该有你的带照片的身份证明。
出于某种原因,这似乎只适用于弹出窗口,而不是实际的图片网址。
答案 6 :(得分:4)
这是python解决方案,无需api调用即可完成此操作。
def media_id_to_code(media_id):
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
short_code = ''
while media_id > 0:
remainder = media_id % 64
media_id = (media_id-remainder)/64
short_code = alphabet[remainder] + short_code
return short_code
def code_to_media_id(short_code):
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
media_id = 0;
for letter in short_code:
media_id = (media_id*64) + alphabet.index(letter)
return media_id
答案 7 :(得分:3)
在纯JS中(假设您的浏览器可以处理XHR,每个主要浏览器[包括IE&gt; 6]都可以):
function igurlretrieve(url) {
var urldsrc = "http://api.instagram.com/oembed?url=" + url;
//fetch data from URL data source
var x = new XMLHttpRequest();
x.open('GET', urldsrc, true);
x.send();
//load resulting JSON data as JS object
var urldata = JSON.parse(x.responseText);
//reconstruct data as "instagram://" URL that can be opened in iOS app
var reconsturl = "instagram://media?id=" + urldata.media_id;
return reconsturl;
}
如果这是你的目标 - 只需打开Instagram iOS应用程序中的页面,这正是它的意义 - 这应该做,特别是如果你不想忍受许可费用。
答案 8 :(得分:2)
如果在Instagram公共URL的末尾添加 ?__a=1
,则会以JSON格式获取公共URL的数据。
对于帖子URL中图像的media ID
,只需在帖子URL中添加JSON请求代码:
http://instagram.com/p/Y7GF-5vftL/?__a=1
响应如下所示。您可以通过回复中的"id"
参数轻松恢复图像ID ...
{
"graphql": {
"shortcode_media": {
"__typename": "GraphImage",
"id": "448979387270691659",
"shortcode": "Y7GF-5vftL",
"dimensions": {
"height": 612,
"width": 612
},
"gating_info": null,
"fact_check_information": null,
"media_preview": null,
"display_url": "https://scontent-cdt1-1.cdninstagram.com/vp/6d4156d11e92ea1731377ef53324ce28/5E4D451A/t51.2885-15/e15/11324452_400723196800905_116356150_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_cat=109",
"display_resources": [
答案 9 :(得分:0)
您可以使用Instagram中的短代码媒体API。如果你使用php,你可以使用以下代码从图像的URL获取短代码:
$matches = [];
preg_match('/instagram\.com\/p\/([^\/]*)/i', $url, $matches);
if (count($matches) > 1) {
$shortcode = $matches[1];
}
然后使用您的访问令牌向API发送请求(将ACCESS-TOKEN
替换为您的令牌)
$apiUrl = sprintf("https://api.instagram.com/v1/media/shortcode/%s?access_token=ACCESS-TOKEN", $shortcode);
答案 10 :(得分:0)
修改强>
iOS Instagram应用程序现已注册在Instagram应用程序中打开的常规http链接,不再需要这种深层链接方法。
<强>旧强>
Swift 4短代码解析解决方案
private static func instagramDeepLinkFromHTTPLink(_ link: String) -> String? {
guard let shortcode = link.components(separatedBy: "/").last else { return nil }
// algorithm from https://stackoverflow.com/a/37246231/337934
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
var mediaId: Int = 0
for (_, char) in shortcode.enumerated() {
guard let index = alphabet.index(of: char) else { continue }
mediaId = (mediaId * 64) + index.encodedOffset
}
return "instagram://media?id=\(mediaId)"
}
答案 11 :(得分:0)
您可以在Python中实现的相同内容
import requests,json
def get_media_id(media_url):
url = 'https://api.instagram.com/oembed/?callback=&url=' + media_url
response = requests.get(url).json()
print(response['media_id'])
get_media_id('MEDIA_URL')
答案 12 :(得分:0)
一段时间以来,我不得不经常自己提取Media ID,因此我编写了自己的脚本(很可能是基于此处的一些示例)。与我经常使用的其他小脚本一起,我开始将它们上传到www.findinstaid.com,以方便自己访问。
我添加了以下选项:输入用户名以获取最近12条帖子的媒体ID,或输入URL以获取特定帖子的媒体ID。
如果方便的话,每个人都可以使用该链接(我在网站上没有任何添加或任何其他货币利益-我在“审核”标签上仅具有指向www.auditninja.io的推荐链接既拥有,但在此网站上,没有任何利益或金钱利益-只是爱好项目)。
答案 13 :(得分:0)
Instagram已在2019年末弃用其旧版API以支持Basic Display API
在基本显示API 中,您应该使用以下API端点来获取媒体ID 。您需要提供有效的访问令牌。
https://graph.instagram.com/me/media?fields=id,caption&access_token={access-token}
您可以在此处阅读如何配置测试帐户并在Facebook developer portal上生成访问令牌。
Here是另一篇文章,还介绍了如何获取访问令牌。
答案 14 :(得分:0)
Instagram 媒体 ID 到简码
Instagram 短代码到媒体 ID
var bigint = require( 'big-integer' )
var lower = 'abcdefghijklmnopqrstuvwxyz';
var upper = lower.toUpperCase();
var numbers = '0123456789'
var ig_alphabet = upper + lower + numbers + '-_'
var bigint_alphabet = numbers + lower
function toShortcode( longid )
{
var o = bigint( longid ).toString( 64 )
return o.replace(/<(\d+)>|(\w)/g, (m,m1,m2) =>
{
return ig_alphabet.charAt( ( m1 )
? parseInt( m1 )
: bigint_alphabet.indexOf( m2 ) )
});
}
function fromShortcode( shortcode )
{
var o = shortcode.replace( /\S/g, m =>
{
var c = ig_alphabet.indexOf( m )
var b = bigint_alphabet.charAt( c )
return ( b != "" ) ? b : `<${c}>`
} )
return bigint( o, 64 ).toString( 10 )
}
toShortcode( '908540701891980503' ) // s.b. 'ybyPRoQWzX'
fromShortcode( 'ybyPRoQWzX' ) // s.b. '908540701891980503'
答案 15 :(得分:-2)
右键单击照片,然后在新选项卡/窗口中打开。右键单击inspect element
。搜索:
的Instagram://介质ID =
这会给你:
instagram:// media?id = ############# /// ID
来自
的完整id构造 photoID_userID
要获取用户ID,请搜索:
instapp:owner_user_id 将在content =