我在哪里可以找到图像的Instagram媒体ID

Taz*_*Taz 30 instagram instagram-api

我正在寻找MediaID已经上传的Instagram图片.应该是这样的

1234567894561231236_33215652

我发现最后一组整数是 usersID

例如:这是图像的直接链接,但我没有看到mediaID正确的格式?

http://distilleryimage11.ak.instagram.com/d33aafc8b55d11e2a66b22000a9f09de_7.jpg
Run Code Online (Sandbox Code Playgroud)

虽然这是链接

http://instagram.com/p/Y7GF-5vftL/
Run Code Online (Sandbox Code Playgroud)

我不希望使用API​​,因为我需要所选图像中的MediaID.

Geo*_*rge 79

这是一个更好的方法:

http://api.instagram.com/oembed?url=http://instagram.com/p/Y7GF-5vftL/
Run Code Online (Sandbox Code Playgroud)

渲染为json对象,您可以轻松地从中提取媒体ID ---

例如,在PHP中

$api = file_get_contents("http://api.instagram.com/oembed?url=http://instagram.com/p/Y7??GF-5vftL/");      
$apiObj = json_decode($api,true);      
$media_id = $apiObj['media_id'];
Run Code Online (Sandbox Code Playgroud)

例如,在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){}   
    } 
});
Run Code Online (Sandbox Code Playgroud)

  • 我没有对此进行过测试,但是我的头脑中没有:`$ .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(e){}}}) ;`如果您需要进一步的帮助,请创建一张新票并告诉我 (2认同)

Ans*_*elm 19

因此,最多投票的"更好的方式"有点贬值,所以这里是我的编辑和其他解决方案:

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;
   }
});
Run Code Online (Sandbox Code Playgroud)

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'];
Run Code Online (Sandbox Code Playgroud)

所以,这只是@ George代码的更新版本,目前正在运行.但是,我做了其他解决方案,有些甚至避免了ajax请求:


Shortcode 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];
Run Code Online (Sandbox Code Playgroud)

在相同的范围内,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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

返回的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;
  }
Run Code Online (Sandbox Code Playgroud)

注意:如果你想要一个更强大的node.js解决方案,或者想要看看如何将其转换回来,请在npm上查看@Slang模块.


全页解决方案

那么如果你有一个完整的Instagram页面的URL如下所示:https://www.instagram.com/p/BAYYJBwi0Tssh605CJP2bmSuRpm_Jt7V_S8q9A0/

好吧,您实际上可以阅读HTML以查找包含介质ID的元属性.您还可以在URL本身上执行其他几种算法来获取它,但我认为这需要付出太多努力,因此我们会保持简单.无论是查询meta标签 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;
}
Run Code Online (Sandbox Code Playgroud)

在那里,您可以使用Instagram的API来获取媒体ID.希望能解决你的困境.


ger*_*rbz 14

这里有一个甚至更好的方法:

没有API调用!而且我把转换media_id为a shortcode作为一个额外的奖励.

基于俚语 用于计算转换惊人工作. Nathan的 工作在php中将base10转换为base64.并且rgbflawed的 工作将其转换回另一种方式(使用修改后的字母表).#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;

}
Run Code Online (Sandbox Code Playgroud)


Ela*_*son 13

如果?__a=1在 Instagram 公共 URL 的末尾添加,您将获得 JSON 格式的公共 URL 数据。

对于media ID来自 post URL 的图像,只需在 post 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": [
Run Code Online (Sandbox Code Playgroud)

  • 不再工作了。 (5认同)
  • 正如 yild 提到的,Instagram 停止了这个非官方 ?__a=1 api 端点 (2认同)

sla*_*ang 11

您实际上可以使用我在此处编写的方法从算法上从链接的最后一段派生MediaId:http://carrot.is/coding/instagram-ids.它的工作原理是通过字符代码映射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).

如果_在您指定的表单中获得完整ID 之后附加userId ,但由于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
Run Code Online (Sandbox Code Playgroud)


小智 8

尝试这个问题的解决方案: 如何从Twitter实体获得直接的Instagram链接?

您可以通过将/ media /附加到URL来获取图像.用你的

你甚至可以指定一个大小,

t(缩略图),m(中),l(大)中的一个.默认为m.

所以对于缩略图:http://instagr.am/p/QC8hWKL_4K/media/?size = t


use*_*271 6

您的媒体ID是:448979387270691659_45818965 这是如何获得它.

  1. 转到instgram.com/username.
  2. 点击您想要ID的照片.
  3. (Chrome说明)右键点击照片(应该是弹出图片)
  4. 检查元素
  5. 搜索所选文本,您应该会看到类似这样的内容 photo448979387270691659_45818965

应该有你的照片ID.

出于某种原因,这似乎只适用于弹出窗口,而不是实际的图像URL.


Abd*_*eed 5

这是无需api调用即可执行此操作的python解决方案。

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
Run Code Online (Sandbox Code Playgroud)