web-dev-qa-db-ja.com

IDでInstagramメディアのURLを見つける

あまり公式ではないHTTP呼び出しのおかげで、メディアID、画像URL、およびInstagram投稿のユーザー名を見つけました。

しかし、Instagramの各投稿のURLが必要であり、それを見つける方法がわかりません。

instagram.com/something/{mediaID}にリダイレクトするinstagram.com/p/{mediaSlug}のようなURL、またはメディアIDでスラッグを見つける別の方法があります(もちろん公式APIを使用せずに!)?

たとえば、私は持っています:

一意の番号:1238578393243739028_1408429375

メディアID:1238578393243739028

ユーザーID:1408429375

そして私は:

https://www.instagram.com/p/BEwUHyDxGOU/

ご協力いただきありがとうございます !

9
Pierre

これは役に立ちます:

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で保護されています

6
Alex Torson

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

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

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

素晴らしい 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を戻すだけです。

1
Milovan Zogovic

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

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