Công nghệ, Nodejs

Rảnh rỗi lại ngồi cào thử trang news với nodejs

Hello anh em ! đã rất lâu lâu lâu lâu lâu ….. rồi mình mới lại rảnh ngồi chăm sóc con blog cùi bắp này. Phần vì bận công việc phần vì gia đình có thêm em bé nên loanh quanh chơi với  nó. Đấy mấy thanh niên đang còn tự do thì lo mà cố gắng mà phấn đâu làm cái mình thích. Không sau này vợ con vào rồi thời gian nó eo hẹp máu lửa cũng ko còn nhiều.Phần cũng vì  chẳng biết chia sẻ gì với các bạn cái gì vì các bạn trẻ bjo giỏi quá.Thôi lan man quá ! chẳng là mình  đang nghich làm site tin tức nên tiện chia sẻ anh em cách lấy tin từ site victim luôn . Cụ thể là mình sẽ lấy tin từ site fireant.vn nhé.
Đầu tiên ngó qua site xem nó viết kiểu gì ? thì ra site này thuộc dạng site js có thể là làm băng reactjs. Mà site dạng js  thế thì không thể dùng kiểu soi Dom như bình thường được. vì các phần tử không load lên cùng lúc. Vậy là mình lại  nghĩ đến sử dụng selenium .   Nhưng dùng mãi selenium thì cũng chán . Mình có biết một thư viện js cũng dùng headless browser hay chẳng kém thằng selenium là puppeteer. Mà từ từ giết gà thì cần gì dao mổ trâu . Vì là site js nên nó kiểu gì cũng phải gọi Api. Thế  thì thử Inspect nó lên xem sao nào. Ok sau khi ấn F12 thì vào tab network rồi load lại trang  xem nó gửi nhưng request gì.

Đây rồi có api đây rồi. Để xem tiếp nó trả về data như thế nào nào.

Dữ liệu quá đẹp rồi ta có được title có được postID. Giờ mình thử dùng postman để request riêng cái api ấy xem có lấy đúng như những gì load dc trên site không nào.

Hầy api này có auth à . Tưởng húp được luôn lại sướng quá. Vậy lại phải xem xét thêm api này có gì nào.Thường những trường hợp thế này thì vào header của nó xem nó gửi những gì vào header có token  hay referer gì không.

Đây rồi có cái bear token chềnh ềnh ra kia rồi copy thử thả vào header postman xem nào.

Đẹp luôn game là dễ. Oke vậy là chỉ cần thêm auth vào header là múc được api rồi . Trường hợp mà hết hạn token thì lại vào site soi inspect lên lấy thôi .
Rồi vậy là chúng ta có dc api lấy list  bài viết. Giờ xem xem họ lấy chi tiết một bài thế nào nào. Thử click xem một bài viết và lại soi inspect lên.
Vậy là để lấy được chi tiết bài viết thì hộ gọi đến api https://restv2.fireant.vn/posts/{ID bài viết}. Mà id bài viết thì chúng ta có được từ api trên rồi. Và đương nhiên api này cũng đòi auth token. Thử với Postman xem dữ liệu ra thế nào.

Ngon luôn ae ơi đầy đủ api rồi giờ code tí để lấy thôi nhỉ.Ở đây mình dùng nodejs để múc cho tiện.

[code lang=”javascript”]
const axios = require(‘axios’);

async function getNews(offset) {
dis = await axios.get(`https://restv2.fireant.vn/posts?type=1&offset=${offset}&limit=1000`, {
headers: {
‘content-type’: ‘application/x-www-form-urlencoded; charset=UTF-8’,
‘user-agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36’,
‘Accept-Language’: ‘en-US,en;q=0.9,vi;q=0.8’,
‘X-Requested-With’: ‘XMLHttpRequest’,

‘authorization’: ‘Bearer TOKEN’
}
});

return dis.data;

};

async function getDetailNews(id){
dis = await axios.get(`https://restv2.fireant.vn/posts/${id}`, {
headers: {
‘content-type’: ‘application/x-www-form-urlencoded; charset=UTF-8’,
‘user-agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36’,
‘Accept-Language’: ‘en-US,en;q=0.9,vi;q=0.8’,
‘X-Requested-With’: ‘XMLHttpRequest’,

‘authorization’: ‘Bearer TOKEN’
}
});

return dis.data;
}

(async (){
var endloop = true;
var countOffset = 0;
while(endloop){
let data = await getNews(countOffset);

data.forEach(async (value, index)=>{
var dataPost = [];
let dataDetail = await getDetailNews(value.postID);
console.log();
dataPost.push({
‘title’ : value.title,
‘image’ : `https://static.fireant.vn/posts/image/${dataDetail.images[0].imageID}`,
‘content’: dataDetail.content,
‘source’ : dataDetail.postSource.name
});
console.log(dataPost);
});
countOffset += 1000;
}
})();

[/code]

Oke code nguệch ngoạc vài dòng demo thế thôi còn data lấy được về thì ae có thể lưu lại hoặc các bạn có thể dùng api của wordpress như mình hướng dẫn tại đây để đăng trực tiếp lên web của mình luôn cho nhanh. Thôi chào ae mình lại lặn tiếp đây zzZZZ.

Được gắn thẻ ,

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *