アップロードされたInstagramイメージのMediaID
を探しています。次のようになります
1234567894561231236_33215652
整数の最後のセットはusersID
であることがわかりました
たとえば、これは画像への直接リンクですが、正しい形式でmediaID
が表示されませんか?
http://distilleryimage11.ak.instagram.com/d33aafc8b55d11e2a66b22000a9f09de_7.jpg
これはリンクですが
http://instagram.com/p/Y7GF-5vftL/
選択した画像のMediaIDが必要なため、APIを使用したくありません。
したがって、最もよく投票された"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を取得するさまざまな方法があります。あなたの闘争が解決することを願っています。
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){}
}
});
API呼び出しはありません!そして、私はmedia_id
をshortcode
に追加ボーナスとして。
変換に基づいて スラング驚くべき仕事 に基づきます。 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;
}
ここで書いたメソッド http://carrot.is/coding/instagram-ids を使用して、アルゴリズムのリンクの最後のセグメントから実際にMediaIdを導出できます。 URLコードを文字コードでマッピングし、IDをベース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
この質問から解決策を試してください: TwitterエンティティからInstagramの直接リンクを取得するにはどうすればよいですか?
URLに/ media /を追加すると、画像だけを取得できます。を使用して
サイズを指定することもできますが、
T(サムネイル)、m(中)、l(大)のいずれか。デフォルトはmです。
メディアID:448979387270691659_45818965
これを取得する方法です。
photo448979387270691659_45818965
写真付きの身分証明書が必要です。
何らかの理由で、これはポップアップでのみ機能し、実際の画像URLでは機能しないようです。
これは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
純粋な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アプリでページを開くだけです。これがまさにその目的です-これは、特にライセンス料を我慢したくない場合に行うべきです。
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')
編集
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)"
}
しばらくの間、私は非常に頻繁に自分でメディアIDを抽出する必要があったため、独自のスクリプトを作成しました(おそらくここのいくつかの例に基づいています)。私が頻繁に使用した他の小さなスクリプトと一緒に、自分ですばやくアクセスできるようにwww.findinstaid.comにアップロードし始めました。
ユーザー名を入力して最新の12個の投稿のメディアIDを取得するオプション、またはURLを入力して特定の投稿のメディアIDを取得するオプションを追加しました。
便利な場合は、誰でもリンクを使用できます(ウェブサイトに追加やその他の金銭的利益はありません-私も所有しているwww.auditninja.ioへの[監査]タブに紹介リンクしかありませんが、このサイトでは、追加や金銭的利益はありません-趣味のプロジェクトだけです)。
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);