Где найти идентификатор Instagram media ID изображения

Я ищу MediaID изображения Instagram, которое было загружено. Это должно выглядеть как

1234567894561231236_33215652

я узнал, что последний набор целых чисел-это usersID

например: это ссылка для изображения напрямую, однако я не вижу mediaID в правильном формате?

http://distilleryimage11.ak.instagram.com/d33aafc8b55d11e2a66b22000a9f09de_7.jpg

а это ссылка

http://instagram.com/p/Y7GF-5vftL/

Я не хочу использовать API как все, что мне нужно MediaID из выбранного изображения.

12 ответов


так что большинство проголосовали "Лучше" немного обесценивается, поэтому вот мое редактирование и другие решения:

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 Решение

некоторые URL-адреса Instagram используют сокращенный синтаксис url. Это позволяет клиенту просто использовать шорткод вместо идентификатора носителя при правильном запросе.

пример url-адреса шорткода выглядит следующим образом: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 есть много другой полезной информации, включая идентификатор носителя. Войдите в него или посмотрите документацию 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;
  }

Примечание: Если вы хотите более надежный узел.JS решение, или хотите увидеть, как вы бы преобразовать его обратно, проверить @Slang's модуль на npm.


Полная Страница Решение

Итак, что делать, если у вас есть URL-адрес полной страницы Instagram, например:https://www.instagram.com/p/BAYYJBwi0Tssh605CJP2bmSuRpm_Jt7V_S8q9A0/

Ну, вы действительно можете прочитать HTML найдите свойство meta, содержащее идентификатор носителя. Есть также несколько других алгоритмов, которые вы можете выполнить на самом URL, чтобы получить его, но я считаю, что это требует слишком много усилий, поэтому мы будем держать его простым. Либо запрос мета-тега al:ios:url или повторите html. Поскольку чтение метатегов размещено повсюду,я покажу вам, как повторять.

Примечание: это немного неустойчиво и уязвимо для исправления. Этот метод не работает на странице, которая использует окно предварительного просмотра. Поэтому, если вы дадите ему текущий HTML при нажатии на изображение в чьем-то профиле, это сломает и вернет плохой идентификатор носителя.

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;
}

и там вы идете, куча различных способов использовать api Instagram, чтобы получить идентификатор носителя. Надеюсь, один исправит вашу борьбу.


вот лучше так:

http://api.instagram.com/oembed?url=http://instagram.com/p/Y7GF-5vftL/

Render как объект json, и вы можете легко извлечь из него идентификатор носителя - - -

например, в 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'];

например, в 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){}   
    } 
});

вы можете фактически вывести MediaId из последнего сегмента ссылки алгоритмически, используя метод, о котором я писал здесь:http://carrot.is/coding/instagram-ids. Он работает путем сопоставления сегмента URL по кодам символов и преобразования идентификатора в базовый номер 64.

например, учитывая ссылку, которую вы упомянули (http://instagram.com/p/Y7GF-5vftL), получаем последний сегмент (Y7GF-5vftL) затем мы сопоставляем его в символьные коды, используя в base64 URL-адрес-безопасный алфавит (24:59:6:5:62:57:47:31:45:11_64). Затем мы преобразуем это число base64 в base10 (448979387270691659).

если вы добавляете свой идентификатор пользователя после _ вы получаете полный идентификатор в указанной вами форме, но поскольку MediaId уникален без идентификатора пользователя, вы можете фактически опустить идентификатор пользователя из большинства запросов.

наконец, я сделал узел.модуль js называется instagram-id-to-url-сегмент для автоматизации этого преобразования:

convert = require('instagram-id-to-url-segment');
instagramIdToUrlSegment = convert.instagramIdToUrlSegment;
urlSegmentToInstagramId = convert.urlSegmentToInstagramId;

instagramIdToUrlSegment('448979387270691659'); // Y7GF-5vftL
urlSegmentToInstagramId('Y7GF-5vftL'); // 448979387270691659

попробуйте решение из этого вопрос: Как я могу получить прямую ссылку Instagram от объекта twitter?

вы можете получить только изображение, добавив/ media / к URL-адресу. Используя ваш

вы даже можете указать размер,

один из t (эскиз), m (средний), l (большой). По умолчанию м.

Так для эскиза: http://instagr.am/p/QC8hWKL_4K/media/?size=t


здесь даже лучше так:

нет вызовов API! И я бросил в преобразование media_id до shortcode в качестве дополнительного бонуса.

на основе слэнг-х потрясающая работа для выяснения преобразования. Нейтан работа преобразование base10 в base64 в php. И rgbflawed это работа преобразование его обратно в другую сторону (с измененным алфавитом). # teamefort

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;

}

Ваш идентификатор носителя:448979387270691659_45818965 Вот как его получить.

  1. перейти к instgram.com/username.
  2. нажмите на фотографию, которую вы хотите идентификатор.
  3. (инструкции Chrome) щелкните правой кнопкой мыши на фотографии (должно быть всплывающее изображение)
  4. Проинспектировать элемент
  5. поиск по выбранному тексту, вы должны увидеть что-то вроде этого photo448979387270691659_45818965

должен быть Ваш идентификатор фотографии.

по какой-то причине это работает только с всплывающим окном, а не фактическим URL-адресом изображения.


в чистом JS (при условии, что ваш браузер может обрабатывать XHRs, который может каждый основной браузер [включая IE > 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, что именно об этом-это должно сделать, особенно если вы не хотите терпеть лицензионные сборы.


вот решение 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

вы можете использовать шорткод media API из instagram. Если вы используете php, вы можете использовать следующий код для получения шорткода из URL-адреса изображения:

$matches = [];

preg_match('/instagram\.com\/p\/([^\/]*)/i', $url, $matches);

if (count($matches) > 1) {
    $shortcode = $matches[1];
}

затем отправьте запрос в API, используя маркер доступа (Replace ACCESS-TOKEN С вашего маркера)

$apiUrl = sprintf("https://api.instagram.com/v1/media/shortcode/%s?access_token=ACCESS-TOKEN", $shortcode);

Свифт 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)"
}

то же самое, что вы можете реализовать в 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')

щелкните правой кнопкой мыши на фотографии и откройте новую вкладку/Окно. Щелкните правой кнопкой мыши на inspect element. Искать:

instagram://медиа?id=

это даст вам:

instagram://медиа?id=############# / / / ID

полная конструкция id из

photoID_userID

чтобы получить идентификатор пользователя, выполните поиск:

instapp:owner_user_id будет в Content=