Я поиграл с пакетом под названием 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.
2 ответа
Вам не нужен целый модуль 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);
});
Итак, проблема в том, что вы не вошли в систему. По сути, 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. Или вы можете вручную аутентифицировать себя, используя apis, и самостоятельно нажать этот URL.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.