あまり公式ではないHTTP呼び出しのおかげで、メディアID、画像URL、およびInstagram投稿のユーザー名を見つけました。
しかし、Instagramの各投稿のURLが必要であり、それを見つける方法がわかりません。
instagram.com/something/{mediaID}
にリダイレクトするinstagram.com/p/{mediaSlug}
のようなURL、またはメディアIDでスラッグを見つける別の方法があります(もちろん公式APIを使用せずに!)?
たとえば、私は持っています:
一意の番号:1238578393243739028_1408429375
メディアID:1238578393243739028
ユーザーID:1408429375
そして私は:
ご協力いただきありがとうございます !
これは役に立ちます:
1)自分でURLを生成するアルゴリズム http://carrot.is/coding/instagram-ids
2)また、Instagramにはmedia_idでURLを生成するプライベートAPIエンドポイントがあります: https://i.instagram.com/api/v1/media/1212073297261212121_121212123111/permalink/ ただし、cookie sessionidで保護されています
Javaソリューション:
public static String getInstagramPostId(String mediaId) {
String postId = "";
try {
long id = Long.parseLong(mediaId.substring(0, mediaId.indexOf('_')));
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
while (id > 0) {
long remainder = (id % 64);
id = (id - remainder) / 64;
postId = alphabet.charAt((int)remainder) + postId;
}
} catch (Exception e) {
e.printStackTrace();
}
return postId;
}
IOS Objective-Cのソリューションを見つけました。
-(NSString *) getInstagramPostId:(NSString *)mediaId {
NSString *postId = @"";
@try {
NSArray *myArray = [mediaId componentsSeparatedByString:@"_"];
NSString *longValue = [NSString stringWithFormat:@"%@",myArray[0]];
long itemId = [longValue longLongValue];
NSString *alphabet = @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
while (itemId > 0) {
long remainder = (itemId % 64);
itemId = (itemId - remainder) / 64;
unsigned char charToUse = [alphabet characterAtIndex:(int)remainder];
postId = [NSString stringWithFormat:@"%c%@",charToUse , postId];
}
} @catch(NSException *exception) {
NSLog(@"%@",exception);
}
return postId;}
Big-integerパッケージを使用してJavaScriptで実装を共有する( https://www.npmjs.com/package/big-integer )
var bigInt = require('big-integer');
function getShortcodeFromTag(tag) {
let id = bigInt(tag.split('_', 1)[0]);
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
let remainder;
let shortcode = '';
while (id.greater(0)) {
let division = id.divmod(64);
id = division.quotient;
shortcode = `${alphabet.charAt(division.remainder)}${shortcode}`;
}
return shortcode;
}
素晴らしい http://carrot.is/coding/instagram-ids の記事に基づいて、以下に例を示しますRuby数値を文字列IDに変換する実装:
_def translate(post_id)
dict = [?A..?Z, ?a..?z, 0..9].map(&:to_a).flatten
dict += ['-', '_']
post_id = post_id.split('_').first.to_i
to_radix(post_id, 64).map { |d| dict[d] }.join
end
def to_radix(int, radix)
int == 0 ? [] : (to_radix(int / radix, radix) + [int % radix])
end
_
translate('1238578393243739028_1408429375')
を呼び出してBEwUHyDxGOU
を戻すだけです。
Swift 4.2ソリューション:
func getInstagramPostId(_ mediaId: String?) -> String? {
var postId = ""
do {
let myArray = mediaId?.components(separatedBy: "_")
let longValue = "\(String(describing: myArray?[0]))"
var itemId = Int(Int64(longValue) ?? 0)
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
while itemId > 0 {
let remainder: Int = itemId % 64
itemId = (itemId - remainder) / 64
let charToUse = alphabet[alphabet.index(alphabet.startIndex, offsetBy: Int(remainder))]
postId = "\(charToUse)\(postId)"
}
}
return postId
}
C#ソリューション:
public static string getInstagramPostId(string mediaId)
{
string postId = "";
try
{
long id = long.Parse(mediaId.Substring(0, mediaId.IndexOf('_')));
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
while (id > 0)
{
long remainder = (id % 64);
id = (id - remainder) / 64;
int a = (int)remainder + int.Parse(postId);
postId = "" + alphabet[a];
}
}
catch (Exception e)
{
Console.Write(e.StackTrace);
}
return postId;
}
C#ソリューション(テスト済み)
public static string getInstagramPostId(string mediaId)
{
string postId = "";
try
{
long id = long.Parse(mediaId.Substring(0, mediaId.IndexOf('_')));
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
while (id > 0)
{
long remainder = (id % 64);
id = (id - remainder) / 64;
postId = alphabet.ElementAt((int)remainder) + postId;
}
}
catch (Exception e)
{
Console.Write(e.StackTrace);
}
return postId;
}