我玩了一个叫做instagram-profile-picture的程序包。
这是我使用的代码,直接来自npm网站示例:
const ipp = require('instagram-profile-picture');
ipp('9gag').then(user => {
console.log(user);
// => https://scontent-sit4-1.cdninstagram.com/7...jpg
});
这曾经是几天前我测试过的。
现在,突然出现此错误:
(node:1820) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'u
rl' of undefined
at got.then.res (C:\Users\User1\Desktop\testing npm\node_modules\insta
gram-profile-picture\index.js:15:49)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
(node:1820) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This
error originated either by throwing inside of an async function without a catch
block, or by rejecting a promise which was not handled with .catch(). (rejection
id: 1)
(node:1820) [DEP0018] DeprecationWarning: Unhandled promise rejections are depre
cated. In the future, promise rejections that are not handled will terminate the
Node.js process with a non-zero exit code.
这很奇怪,因为我没有更改代码。
所以我尝试了新安装
npm init -> npm install instagram-profile-picture
然后我以前发布的代码相同,而从npm示例中我仍然直接遇到相同的错误。
答案 0 :(得分:2)
因此,问题是因为您尚未登录。基本上instagram更改了查询API,如果您有活动的会话(已登录),它将显示更多信息,否则,它将显示更多信息。
因此,对于9gag
,如果已登录:(只需粘贴相关部分)
{
"user": {
"pk": 259220806,
"hd_profile_pic_url_info": {
"url": "https://instagram.fbom20-1.fna.fbcdn.net/vp/777f85cb149a23d10da15f4af19ef407/5DE89E04/t51.2885-19/18645376_238828349933616_4925847981183205376_a.jpg?_nc_ht=instagram.fbom20-1.fna.fbcdn.net",
"width": 512,
"height": 512
}
},
"status": "ok"
}
但是,如果您注销:
{
"user": {
"username": "9gag",
"profile_pic_url": "https://instagram.fbom20-1.fna.fbcdn.net/vp/c91395418170cbb196a69ac9dea359a4/5DD372FE/t51.2885-19/s150x150/18645376_238828349933616_4925847981183205376_a.jpg?_nc_ht=instagram.fbom20-1.fna.fbcdn.net"
},
"status": "ok"
}
但是图书馆需要user.hd_profile_pic_url_info.url
,即undefined
。
图书馆要使用柚木吗?
不幸的是,该代码中的代码非常简单,因为该库仅获取url,您需要找到一个提供某种身份验证的位置。
您可以签出node-instagram,
EDIT2 :从库中调用的端点为https://i.instagram.com/api/v1/users/${userid}/info/
,也许那里的库将支持此api。或者,您也可以使用API手动进行身份验证,然后自己点击该网址。
答案 1 :(得分:1)
您不需要整个npm模块。该API非常简单。
const https = require('https');
function getUserDetails(username) {
return new Promise(done => {
var data = [];
https.get(`https://www.instagram.com/${username}/?__a=1`, resp => {
resp.on('data', chunk => data.push(chunk));
resp.on('end', () => {
var json = JSON.parse(data.join(''));
done(json.graphql.user);
});
});
});
}
getUserDetails('9gag').then(user=>{
var bio = user.biography;
var full_name = user.full_name;
var profile_pic = user.profile_pic_url;
console.log(bio);
console.log(full_name)
console.log(profile_pic);
});