web-dev-qa-db-ja.com

画像のInstagramメディアIDはどこにありますか

アップロードされたInstagramイメージのMediaIDを探しています。次のようになります

1234567894561231236_33215652

整数の最後のセットはusersIDであることがわかりました

たとえば、これは画像への直接リンクですが、正しい形式でmediaIDが表示されませんか?

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

これはリンクですが

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

選択した画像のMediaIDが必要なため、APIを使用したくありません。

30
Taz

したがって、最もよく投票された"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 URLは、短縮URL構文を使用します。これにより、クライアントは、適切に要求された場合、メディアIDの代わりにショートコードを使用することができます。

ショートコードURLの例は次のようになります:https://www.instagram.com/p/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構造には、メディア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の module on npmをチェックしてください。


フルページソリューション

たとえば、Instagramの完全なページへのURLがある場合: https://www.instagram.com/p/BAYYJBwi0Tssh605CJP2bmSuRpm_Jt7V_S8q9A0/

実際、HTMLを実際に読み取って、メディアIDを含むメタプロパティを見つけることができます。 URLを取得するためにURL自体で実行できるアルゴリズムは他にも2つありますが、あまりにも多くの労力が必要であるため、単純にします。 メタタグのクエリ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を取得するさまざまな方法があります。あなたの闘争が解決することを願っています。

19
Anselm

より良い方法は次のとおりです。

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/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){}   
    } 
});
78
George

これはevenより良い方法です:

API呼び出しはありません!そして、私はmedia_idshortcodeに追加ボーナスとして。

変換に基づいて スラング驚くべき仕事 に基づきます。 Nathan'swork phpでbase10をbase64に変換します。そして、 rgbflawed'swork 変換された逆の方法で(修正されたアルファベットで)。 #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;

}
14
gerbz

ここで書いたメソッド http://carrot.is/coding/instagram-ids を使用して、アルゴリズムのリンクの最後のセグメントから実際にMediaIdを導出できます。 URLコードを文字コードでマッピングし、IDをベース64番号に変換することで機能します。

たとえば、あなたが言及したリンク( http://instagram.com/p/Y7GF-5vftL )が与えられると、最後のセグメント(Y7GF-5vftL)を取得し、それを文字コードにマッピングします base64 url​​-safe alphabet24: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
11
slang

この質問から解決策を試してください: TwitterエンティティからInstagramの直接リンクを取得するにはどうすればよいですか?

URLに/ media /を追加すると、画像だけを取得できます。を使用して

サイズを指定することもできますが、

T(サムネイル)、m(中)、l(大)のいずれか。デフォルトはmです。

サムネイルの場合: http://instagr.am/p/QC8hWKL_4K/media/?size=t

8
cluzt

メディアID:448979387270691659_45818965これを取得する方法です。

  1. Instgram.com/usernameにアクセスします。
  2. IDが必要な写真をクリックします。
  3. (Chromeの手順)写真を右クリックします(ポップアップ画像である必要があります)
  4. 検査要素
  5. 選択したテキストを検索すると、次のようなものが表示されますphoto448979387270691659_45818965

写真付きの身分証明書が必要です。

何らかの理由で、これはポップアップでのみ機能し、実際の画像URLでは機能しないようです。

6
user1992271

これは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
5
Abdul Majeed

純粋な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アプリでページを開くだけです。これがまさにその目的です-これは、特にライセンス料を我慢したくない場合に行うべきです。

3
realkstrawn93

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')
0
Shubham Gupta

編集

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)"
}
0
SamB

しばらくの間、私は非常に頻繁に自分でメディアIDを抽出する必要があったため、独自のスクリプトを作成しました(おそらくここのいくつかの例に基づいています)。私が頻繁に使用した他の小さなスクリプトと一緒に、自分ですばやくアクセスできるようにwww.findinstaid.comにアップロードし始めました。

ユーザー名を入力して最新の12個の投稿のメディアIDを取得するオプション、またはURLを入力して特定の投稿のメディアIDを取得するオプションを追加しました。

便利な場合は、誰でもリンクを使用できます(ウェブサイトに追加やその他の金銭的利益はありません-私も所有しているwww.auditninja.ioへの[監査]タブに紹介リンクしかありませんが、このサイトでは、追加や金銭的利益はありません-趣味のプロジェクトだけです)。

0
Mikkel Duif

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);
0
totas