Я поиграл с пакетом под названием 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
user1584421 16 Авг 2019 в 20:21

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);
});
1
I wrestled a bear once. 16 Авг 2019 в 18:31

Итак, проблема в том, что вы не вошли в систему. По сути, 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.

2
Aritra Chakraborty 16 Авг 2019 в 18:00