-
Notifications
You must be signed in to change notification settings - Fork 0
/
FetchAllUserPicture.js
104 lines (71 loc) · 2.87 KB
/
FetchAllUserPicture.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
const fs = require('fs');
const puppeteer = require('puppeteer-core');
// 讀取 JSON 檔案
const filteredFollowingValuesdata = fs.readFileSync('filteredFollowingValues.json', 'utf8');
// 解析 JSON 資料
const filteredFollowingValues= JSON.parse(filteredFollowingValuesdata);
// 提取 value 值並組成新陣列
const valuesArray = filteredFollowingValues.map(item => item.value);
// 將新陣列寫入新的 JSON 檔案
fs.writeFileSync('values.json', JSON.stringify(valuesArray, null, 2));
console.log('提取完成,結果已寫入 values.json');
let not_found_list = []
async function getProfilePicture(username) {
const browser = await puppeteer.launch({
executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe', // 指定 Chrome 瀏覽器的路徑
headless: true,
});
const page = await browser.newPage();
await page.goto(`https://www.threads.net/${username}`, { waitUntil: 'networkidle2' });
try {
await page.waitForSelector('img[alt*="的大頭貼照"]', { timeout: 1000 });
} catch (error) {
console.log(`${username} not found`);
not_found_list.push(username);
await browser.close();
return null;
}
const profilePictureElement = await page.$('img[alt*="的大頭貼照"]');
const profilePictureUrl = await profilePictureElement.getProperty('src');
const profilePictureUrlValue = await profilePictureUrl.jsonValue();
// 下載抓取到的圖片
const viewSource = await page.goto(profilePictureUrlValue);
if (!fs.existsSync('profile_pictures')) {
fs.mkdirSync('profile_pictures');
}
const filePath = `profile_pictures/${username}_profile_picture.png`;
if (fs.existsSync(filePath)) {
console.log(`${username} already exists!`);
await browser.close();
return profilePictureUrlValue;
}
fs.writeFile(filePath, await viewSource.buffer(), function (err) {
if (err) {
return console.log(err);
}
console.log(`${username} was saved!`);
});
await browser.close();
return profilePictureUrlValue;
}
async function processUsernames(values) {
for (const username of values) {
const profilePictureUrl = await getProfilePicture(username);
}
}
const data = fs.readFileSync('filteredFollowingValues.json', 'utf8');
// 解析 JSON 資料
const jsonData = JSON.parse(data);
// 遍歷每個物件並新增 profilePicture 屬性
jsonData.forEach(item => {
item.profilePicture = `profile_pictures/${item.value}_profile_picture.png`;
});
// 將更新後的資料寫回 JSON 檔案
fs.writeFileSync('AppData.json', JSON.stringify(jsonData, null, 2));
console.log('已新增 profilePicture 屬性並更新 filtered_following.json 檔案');
// 使用示例
//取的values.json的值
const valuesdata = fs.readFileSync('values.json', 'utf8');
const values = JSON.parse(valuesdata);
processUsernames(values);
console.log(`總共有 " ${values.length} " 資料需要查詢`);