Create index.js

master
Inga 🏳‍🌈 6 years ago
parent 86a0af6bc0
commit 905e323033
  1. 134
      index.js

@ -0,0 +1,134 @@
"use strict";
const fs = require('fs');
const fsPromises = fs.promises;
const http = require('https');
const vk = require('vk-dirty-api');
process.on('unhandledRejection', error => {
// Will print "unhandledRejection err is not defined"
console.log('unhandledRejection', error);
});
function pDownload(url, dest){
// https://stackoverflow.com/a/34524711
var file = fs.createWriteStream(dest);
return new Promise((resolve, reject) => {
var responseSent = false; // flag to make sure that response is sent only once.
http.get(url, response => {
response.pipe(file);
file.on('finish', () =>{
file.close(() => {
if(responseSent) return;
responseSent = true;
resolve();
});
});
}).on('error', err => {
if(responseSent) return;
responseSent = true;
reject(err);
});
});
}
function getAttachments(post) {
if (post.attachments) {
return post.attachments;
}
if (post.copy_history) {
for (const copy of post.copy_history) {
const attachments = getAttachments(copy);
if (attachments) {
return attachments;
}
}
}
return null;
}
function sleep(ms) {
// https://www.stackoverflow.com/questions/951021
return new Promise(resolve => setTimeout(resolve, ms));
}
(async (token) => {
const api = vk.api(token);
/**
* Request current account info
*/
const info = await api('account.getInfo', { fields: 'country' });
console.log(info);
let offset = 0;
while (true) {
const wall = await api('wall.get', {
count: 100,
offset: offset,
filter: 'all',
extended: 1
});
if (!(wall.items || []).length) {
break;
}
for (const post of wall.items) {
console.log(post.text);
await sleep(1100);
const comments = await api('wall.getComments', {
'post_id': post.id,
'need_likes': 1,
count: 100,
'preview_length': 0,
extended: 1,
});
for (const comment of comments.items) {
console.log('----> ' + comment.text);
}
await fsPromises.writeFile(`data/post_${post.owner_id}_${post.id}.json`, JSON.stringify({ post: post, comments: comments }));
let containsUnsupportedAttachments = false;
let isRepost = false;
let i = 0;
for (const attachment of getAttachments(post) || []) {
if (attachment.type === 'photo' || attachment.type === 'posted_photo') {
const photo = attachment.photo || attachment.posted_photo;
const src = photo.photo_2560 || photo.photo_1280 || photo.photo_807 || photo.photo_604 || photo.photo_130 || photo.photo_75;
if (src) {
const extension = /\.\w+$/.exec(src)[0];
var request = await pDownload(src, `data/post_${post.owner_id}_${post.id}.${i}${extension}`);
console.log(`Downloaded ${src} to data/post_${post.owner_id}_${post.id}.${i}${extension}`);
} else {
containsUnsupportedAttachments = true;
}
} else if (attachment.type === 'video' || attachment.type === 'audio' || attachment.type === 'album') {
} else if (attachment.type === 'link' || attachment.type === 'page') {
isRepost = true;
} else {
containsUnsupportedAttachments = true;
console.log(`Unsupported attachment type: ${attachment.type}`);
}
i++;
}
if ((isRepost || (!containsUnsupportedAttachments && !post.text)) && comments.items.length < 50) {
await api('wall.delete', {
'post_id': post.id
});
console.log('deleted');
} else {
offset += 1;
}
}
}
})("0123456789abcdef"); //your token goes here
Loading…
Cancel
Save