Почему я не могу получить все сообщения в Instagram без использования API в NodeJS - PullRequest
3 голосов
/ 29 марта 2020

Обратите внимание, что по состоянию на март 2020 года Instagram значительно изменился, следовательно, этот вопрос не похож на предыдущие. Проблема в том, что я всегда получаю 12 сообщений вместо всех сообщений, используя не Instagram-API. Я сталкивался со многими решениями, но теперь все они возвращают только 12 сообщений, даже знаменитых:

https://www.instagram.com/instagram/?__a=1

Вот что Я получаю instagram аккаунт, который имеет 6282 сообщений:

enter image description here

Я также попробовал следующий трюк, но он также возвращает 12 posts:

async function instagramPhotos () {
    // It will contain our photos' links
    const res = []

    try {
        const userInfoSource = await Axios.get('https://www.instagram.com/instagram/')

        // userInfoSource.data contains the HTML from Axios
        const jsonObject = userInfoSource.data.match(/<script type="text\/javascript">window\._sharedData = (.*)<\/script>/)[1].slice(0, -1)

        const userInfo = JSON.parse(jsonObject)
        // Retrieve only the first 10 results
        const mediaArray = userInfo.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges
        for (let media of mediaArray) {
            const node = media.node

            // Process only if is an image
            if ((node.__typename && node.__typename !== 'GraphImage')) {
                continue
            }

            // Push the thumbnail src in the array
            res.push(node.thumbnail_src)
        }
    } catch (e) {
        console.error('Unable to retrieve photos. Reason: ' + e.toString())
    }

    return res
}

Существует множество npm модулей, которые утверждают, что могут получать фид без использования Instagram API, но в конце они возвращают только 12 сообщений, например: ( instagram- nodejs -without-api )

Я запускаю следующий код, и я также получаю только 12 сообщений :

let Instagram = require('instagram-nodejs-without-api');
Instagram = new Instagram()

const username="instagram"
const password="123hola" 

Instagram.getCsrfToken().then((csrf) =>
{
  Instagram.csrfToken = csrf;
}).then(() =>
{
  return Instagram.auth(username, password).then(sessionId =>
  {
    Instagram.sessionId = sessionId

    return Instagram.getUserDataByUsername(username).then((t) =>
    {
        console.log(t)
    })

  })
}).catch(console.error);

My Следующим шагом будет удаление в Интернете профиля Instagram, но это очень медленно, особенно когда изображений около 6000. Есть ли какой-нибудь элегантный подход к получению этих сообщений? Я только хочу получать свои сообщения, поэтому я не против войти в систему.

1 Ответ

0 голосов
/ 27 апреля 2020

Поскольку мне нужно было получать сообщения из конкретного профиля, я открыл профиль в браузере chrome, открыл консоль и запустил следующий код, чтобы получить все сообщения:

//LOOPING ALL (credit www.hamzadiaz.com)
let posts = []
setInterval(()=>{
var inputs = document.getElementsByClassName('v1Nh3 kIKUG  _bz0w'); 
for(var i=0; i<inputs.length;i++) {
 if(!posts.includes(inputs[i].getElementsByTagName("a")[0].href)){
    posts.push(inputs[i].getElementsByTagName("a")[0].href)
  }
}
},500);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...