Instagram的。给定User_id,我如何找到用户名?

问题描述 投票:9回答:6

我有一个包含数千个Instagram用户ID的列表。我如何获得他们的Instagram用户名/句柄?

谢谢

instagram instagram-api
6个回答
5
投票

你必须使用这个Instagram API:

https://api.instagram.com/v1/users/{user-id}/?access_token=ACCESS-TOKEN

响应将包含用户名,全名,生物,关注者计数和其他信息。

但是,在您访问API之前,您必须获得Instagram批准的应用程序。

您可以尝试https://www.picodash.com,它允许您搜索id并获取用户结果,但它将是一个逐个搜索并获取信息的手动过程


9
投票

如果您没有批准的instagram应用程序,我建议使用这个php库:https://github.com/postaddictme/instagram-php-scraper

$instagram = Instagram::withCredentials('username', 'password', 'path/to/cache/');
$account = $instagram->getAccountById('193886659');
echo $account->getUsername();

或直接访问:

https://www.instagram.com/query/?q=ig_user(3){id,username,external_url,full_name,profile_pic_url,biography,followed_by{count},follows{count},media{count},is_private,is_verified}

更新:此网址不再有效。你需要使用POST。请参阅回购以了解具体方法


4
投票

您可以通过内部/user/端点Instagram用于AJAX请求而无需API访问它:

https://i.instagram.com/api/v1/users/{user_id}/info/

其中{user_id}是数字用户ID,如6817966272

返回的响应示例(请参阅用户名的user['username']键):

GET https://i.instagram.com/api/v1/users/6817966272/info/

{
  "user": {
    "pk": 6817966272,
    "username": "myriaamaa",
    "full_name": "\u2661",
    "is_private": false,
    "profile_pic_url": "https://instagram.fcnx2-1.fna.fbcdn.net/vp/66486d198fc02046d04d7bc11e51e54a/5D913015/t51.2885-19/s150x150/61226760_298998544311382_2345929352031502336_n.jpg?_nc_ht=instagram.fcnx2-1.fna.fbcdn.net",
    "profile_pic_id": "2056076981860037983_6817966272",
    "is_verified": false,
    "has_anonymous_profile_picture": false,
    "media_count": 216,
    "follower_count": 4926,
    "following_count": 83,
    "following_tag_count": 0,
    "biography": "YOU. ARE. HOLY \ud83c\udf19",
    "external_url": "",
    "total_igtv_videos": 0,
    "total_ar_effects": 0,
    "usertags_count": 6,
    "is_favorite": false,
    "is_interest_account": true,
    "hd_profile_pic_versions": [
      {
        "width": 320,
        "height": 320,
        "url": "https://instagram.fcnx2-1.fna.fbcdn.net/vp/fafecdc76c82de85580c9c03d14b1aaa/5D9BD2E5/t51.2885-19/s320x320/61226760_298998544311382_2345929352031502336_n.jpg?_nc_ht=instagram.fcnx2-1.fna.fbcdn.net"
      },
      {
        "width": 640,
        "height": 640,
        "url": "https://instagram.fcnx2-1.fna.fbcdn.net/vp/0ec5339e3958c9c41414e5378fa2443c/5D7DD28A/t51.2885-19/s640x640/61226760_298998544311382_2345929352031502336_n.jpg?_nc_ht=instagram.fcnx2-1.fna.fbcdn.net"
      }
    ],
    "hd_profile_pic_url_info": {
      "url": "https://instagram.fcnx2-1.fna.fbcdn.net/vp/8b3859950f0bb8e1a4a8f65566992b78/5D9132EF/t51.2885-19/61226760_298998544311382_2345929352031502336_n.jpg?_nc_ht=instagram.fcnx2-1.fna.fbcdn.net",
      "width": 774,
      "height": 774
    },
    "mutual_followers_count": 0,
    "has_highlight_reels": true,
    "can_be_reported_as_fraud": false,
    "is_business": false,
    "account_type": 1,
    "is_call_to_action_enabled": null,
    "include_direct_blacklist_status": true,
    "is_potential_business": true,
    "is_bestie": false,
    "has_unseen_besties_media": false,
    "show_account_transparency_details": false,
    "auto_expand_chaining": false,
    "highlight_reshare_disabled": false
  },
  "status": "ok"
}

2
投票

在python中用户(例如https://www.instagram.com/p/Bqfhjk_AMTq/)从帖子中抓取屏幕名称:

import requests, re, json
from bs4 import BeautifulSoup
r = requests.get('https://www.instagram.com/p/Bqfhjk_AMTq/')
soup = BeautifulSoup(r.content, "lxml")
scripts = soup.find_all('script', type="text/javascript", text=re.compile('window._sharedData'))
stringified_json = scripts[0].get_text().replace('window._sharedData = ', '')[:-1]
print json.loads(stringified_json)['entry_data']['PostPage'][0]['graphql']['shortcode_media']['owner']['username']

2
投票

由于Instagram的限制(我的意思是SandBox),使用Instagram官方API并不容易,所以我编写了一个Python片段,将Instagram用户ID转换为用户名,反之亦然。

它使用GraphQL API来获取信息,而不受Instagram的任何限制。

[+]由于Instagram API更改而更新的代码(30/5/2019)

import json
import requests
import re
import hashlib


def usernameToUserId(user):
    r1 = requests.get('https://www.instagram.com/web/search/topsearch/?query=' + user, headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0'}).text

    if json.loads(r1)['users'][0]['user']['username'] == user:
        return json.loads(r1)['users'][0]['user']['pk']


def useridToUsername(id):
    if str(id).isnumeric():
        r1 = requests.get('https://instagram.com/instagram/', headers={
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0', }).text
        rhx_gis = json.loads(re.compile('window._sharedData = ({.*?});', re.DOTALL).search(r1).group(1))['nonce']

        ppc = re.search(r'ProfilePageContainer.js/(.*?).js', r1).group(1)
        r2 = requests.get('https://www.instagram.com/static/bundles/es6/ProfilePageContainer.js/' + ppc + '.js').text
        query_hash = re.findall(r'{value:!0}\);const o=\"(.*?)\"', r2)[0]

        query_variable = '{"user_id":"' + str(id) + '","include_reel":true}'
        t = rhx_gis + ':' + query_variable
        x_instagram_gis = hashlib.md5(t.encode("utf-8")).hexdigest()

        header = {'X-Instagram-GIS': x_instagram_gis,
                  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0',
                  'X-Requested-With': 'XMLHttpRequest'}
        r3 = requests.get(
            'https://www.instagram.com/graphql/query/?query_hash=' + query_hash + '&variables=' + query_variable,
            headers=header).text

        username = json.loads(r3)['data']['user']['reel']['user']['username']
        return username


#print(useridToUsername("1234567890"))
#print(usernameToUserId("TheUserName"))

Github链接:https://github.com/Snbig/InstaTrack


1
投票

现在批准的答案中引用的Instagram API是no longer available,你将不得不求助于另一个答案中描述的抓取。话虽如此,我最终在这个SO,因为我试图找出用户更改用户名的内容。

这就是我的想法:如果你有一个用户ID,你可能一直在刮或使用像4K Stogram这样的东西。如果是这种情况,您可能会有一个媒体页面的直接URL,如下所示:https://www.instagram.com/p/Bjh4rbdHcCU/获取新用户名的最简单方法就是直接转到将使用新用户名更新的URL。如果你自动化它,从页面的<title>元素中提取新用户名非常容易。

我知道原始海报的问题与此有点不同,但希望这是最终在此页面上的一些人的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.