我有一个包含数千个Instagram用户ID的列表。我如何获得他们的Instagram用户名/句柄?
由于
答案 0 :(得分:10)
如果您没有批准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。请参阅回购以了解如何
答案 1 :(得分:6)
你必须使用这个Instagram API:
https://api.instagram.com/v1/users/{user-id}/?access_token=ACCESS-TOKEN
回复将包含用户名,全名,生物,关注者计数和其他信息。
但是,在您访问API之前,您必须获得Instagram批准的应用程序。
您可以尝试https://www.picodash.com,它可以让您搜索ID并获取用户结果,但这将是一个逐个搜索并获取信息的手动过程
答案 2 :(得分:3)
您可以通过instagram用于AJAX请求的内部/user/
端点来访问它,而无需API:
https://i.instagram.com/api/v1/users/{user_id}/info/
其中{user_id}
是数字用户ID,例如6817966272
。
返回的响应示例(有关用户名,请参见user['username']
键):
获取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"
}
答案 3 :(得分: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']
答案 4 :(得分:2)
由于Instagram的API限制(我的意思是 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
答案 5 :(得分:2)
https://github.com/Snbig/InstaTrack在此方面表现出色,可以处理带有ID列表的.txt文件,也可以将用户作为纯文本输出。
答案 6 :(得分:1)
现在,已批准答案中引用的Instagram API为no longer available,您将不得不采用其他答案中所述的抓取方式。话虽如此,我之所以如此,是因为我试图弄清楚用户将用户名更改为什么。
这就是我的想法:如果您有用户ID,则可能是在抓取或使用4K Stogram之类的东西。在这种情况下,您很可能拥有一个媒体页面的直接URL,其外观类似于:https://www.instagram.com/p/Bjh4rbdHcCU/获取新用户名的最简单方法就是直接转到已使用新用户名更新的URL。如果要使其自动化,则很容易从页面的<title>
元素中提取新的用户名。
我知道原始发帖人的问题与此有所不同,但是希望这对于最终出现在此页面上的某些人来说是一个解决方案。
答案 7 :(得分:0)
这是我做的。 在 id 变量中输入您想要查找名称的任何 id,在我的情况下,我使用的是 314216
id=314216 && curl --silent --header $'User-Agent: Instagram 12.0.0.16.90' https://i.instagram.com/api/v1/users/$id/info/ | jq --raw-output .user.username
注意:我在这里使用了 curl 和 jq 实用程序,如果您没有,请安装它们