Hỏi về việc sử dụng module request trong vòng for và crawl data instagram



  • Em đang crawl posts trên instagram dựa vào hashtag, như đoạn code bên dưới thì em muốn lấy data bài viết tiếp theo, thì em phải check xem hasNextPage có true hay không thì mới gửi request lần tiếp theo, và phải dựa vào endCursor của bài post hiện tại thì mới có url để gửi request lần sau
    Vậy các bác cho em hỏi làm thế nào để e có thể gửi request nhiều lần cho đến khi check thì thằng hasNextPage nó là false (tức là hết bài post)?
    Trong khi em viết đoạn request số 2 vứt vào hàm for, hay 1 function đều không chạy?

    0_1536725407024_image.png



  • router.get('/instagram', (req, res) => {
    let hashtag = 'italy';
    let baseOptions = {
    uri: https://www.instagram.com/explore/tags/${hashtag}/?__a=1,
    headers: {
    'User-Agent': 'Request-Promise'
    },
    json: true
    };
    rp(baseOptions)
    .then(function (repos) {
    let data = {}
    let rough = repos.graphql.hashtag
    data.id = rough.id
    data.name = rough.name
    data.profile_pic_url = rough.profile_pic_url
    data.edges = rough.edge_hashtag_to_media.edges
    let hasNextPage = rough.edge_hashtag_to_media.page_info.has_next_page
    let endCursor = rough.edge_hashtag_to_media.page_info.end_cursor
    if (hasNextPage) {
    let options = {
    uri: https://www.instagram.com/explore/tags/${hashtag}/?__a=1&max_id=${endCursor},
    headers: {
    'User-Agent': 'Request-Promise'
    },
    json: true
    };
    rp(options)
    .then(function (repos) {
    console.log('repos :', repos);
    let edges = repos.graphql.hashtag.edge_hashtag_to_media.edges
    hasNextPage = repos.graphql.hashtag.edge_hashtag_to_media.page_info.has_next_page
    endCursor = repos.graphql.hashtag.edge_hashtag_to_media.page_info.end_cursor
    data.edges = data.edges.concat(edges)
    console.log('data.edges.length :', data.edges.length);
    return data.edges

    				})
    				.catch(function (error) {
    					throw error;
    				})
    		}
    	})
    	.catch(function (err) {
    		throw err
    	});
    

    })


Log in to reply