Где найти идентификатор носителя Instagram изображения
Я ищу MediaID
изображения Instagram, которое было загружено. Он должен выглядеть как
1234567894561231236_33215652
Я обнаружил, что последний набор целых чисел - это usersID
Например: это ссылка для изображения напрямую, но я не вижу MediaID
в правильном формате?
http://distilleryimage11.ak.instagram.com/d33aafc8b55d11e2a66b22000a9f09de_7.jpg
пока это ссылка
http://instagram.com/p/Y7GF-5vftL/
Я не хочу использовать API, поскольку мне нужен MediaID из выбранного изображения.
Ответы
Ответ 1
Так что "Лучший путь", за который проголосовали большинство, немного устарел, так что вот мое редактирование и другие решения:
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 Solution
Некоторые URL-адреса Instagram используют сокращенный синтаксис URL-адресов. Это позволяет клиенту просто использовать шорткод вместо идентификатора мультимедиа, если запрашивается правильно.
Пример короткого кода URL выглядит следующим образом: https://www.instagram.com/p/Y7GF-5vftL/
Y7GF-5vftL
- это ваш Y7GF-5vftL
для картинки.
Использование регулярных выражений:
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, чтобы увидеть.
Решение для преобразования шорткодов
Вы можете довольно легко преобразовать свой шорткод в идентификатор! Вот простой способ сделать это в 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 на npm.
Решение для полной страницы
Так что, если у вас есть URL-адрес полной страницы Instagram, например: https://www.instagram.com/p/BAYYJBwi0Tssh605CJP2bmSuRpm_Jt7V_S8q9A0/
Ну, на самом деле вы можете прочитать HTML, чтобы найти мета-свойство, которое содержит идентификатор медиа. Есть также пара других алгоритмов, которые вы можете выполнить для самого 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 для получения идентификатора Media ID. Надеюсь, что вы исправите вашу борьбу.
Ответ 2
Здесь лучший способ:
http://api.instagram.com/oembed?url=http://instagram.com/p/Y7GF-5vftL/
Render as json object, и вы можете легко извлечь из него идентификатор носителя ---
Например, в 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){}
}
});
Ответ 3
Здесь еще лучший способ:
Нет вызовов API! И я бросил преобразование media_id
в shortcode
в качестве дополнительного бонуса.
На основе сленга потрясающая работа для определения конверсии. Натан работа, конвертирующий base10 в base64 в php. И 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;
}
Ответ 4
Фактически вы можете выводить MediaId из последнего сегмента ссылки алгоритмически с помощью метода, который я написал здесь: http://carrot.is/coding/instagram-ids. Он работает путем сопоставления сегмента URL по кодам символов и преобразования идентификатора в базовый номер 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 после _
, вы получите полный идентификатор в указанной вами форме, но поскольку MediaId уникален без userId, вы можете фактически опустить userId из большинства запросов.
Наконец, я сделал модуль Node.js, называемый instagram-id-to-url-segment, чтобы автоматизировать это преобразование:
convert = require('instagram-id-to-url-segment');
instagramIdToUrlSegment = convert.instagramIdToUrlSegment;
urlSegmentToInstagramId = convert.urlSegmentToInstagramId;
instagramIdToUrlSegment('448979387270691659'); // Y7GF-5vftL
urlSegmentToInstagramId('Y7GF-5vftL'); // 448979387270691659
Ответ 5
Попробуйте решить этот вопрос:
Как я могу получить прямую ссылку Instagram из объекта twitter?
Вы можете получить только изображение, добавив/media/в URL. Используя
Вы даже можете указать размер,
Один из t (миниатюра), m (средний), l (большой). По умолчанию m.
Итак, для миниатюры: http://instagr.am/p/QC8hWKL_4K/media/?size=t
Ответ 6
Идентификатор вашего носителя: 448979387270691659_45818965
Вот как это получить.
- Перейдите на страницу instgram.com/username.
- Нажмите на фотографию, в которой вы хотите.
- (инструкции Chrome) щелкните правой кнопкой мыши по фотографии (должно быть всплывающее изображение).
- Осмотреть элемент
- Поиск по выбранному тексту, вы должны увидеть что-то вроде этого
photo448979387270691659_45818965
Должен быть ваш идентификатор фотографии.
По какой-то причине это работает только со всплывающим окном, а не с фактическим URL-адресом изображения.
Ответ 7
Вот решение 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
Ответ 8
В чистом JS (если ваш браузер может обрабатывать XHR, который может использовать каждый основной браузер [в том числе 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, и это именно то, о чем идет речь - это должно быть сделано, особенно если вы не хотите терпеть плату за лицензирование.
Ответ 9
Вы можете использовать API носителей короткого кода из instagram. Если вы используете 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
редактировать
Приложение iOS для iOS теперь зарегистрировано для регулярных http-ссылок, которые открываются в приложении Instagram, и эта методика диплинков больше не нужна.
старый
Синтаксический анализ 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
То же самое, что вы можете реализовать в 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
В течение некоторого времени мне приходилось извлекать Media ID довольно часто, поэтому я написал свой собственный скрипт (весьма вероятно, что он основан на некоторых примерах здесь). Вместе с другими небольшими сценариями, которые я часто использовал, я начал загружать их на www.findinstaid.com для собственного быстрого доступа.
Я добавил возможность ввести имя пользователя для получения идентификатора мультимедиа из 12 последних сообщений или ввести URL-адрес, чтобы получить идентификатор мультимедиа для определенного сообщения.
Если это удобно, каждый может использовать ссылку (у меня нет никаких надбавок или других денежных интересов на веб-сайте - у меня есть только реферальная ссылка на вкладке "Аудит" на www.auditninja.io, которой я тоже владею, но и на этом сайте нет никаких надбавок или денежных интересов - только хобби-проекты).
Ответ 13
Щелкните правой кнопкой мыши по фотографии и откройте ее в новой вкладке/окне. Щелкните правой кнопкой мыши по inspect element
. Поиск:
Instagram://медиа идентификатор =
Это даст вам:
instagram://media? id = ############# ///идентификатор
Полная конструкция id из
photoID_userID
Чтобы получить идентификатор пользователя, выполните поиск:
instapp: owner_user_id Будет в содержании =