-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
fo.js
161 lines (145 loc) · 3.63 KB
/
fo.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
'use strict';
const Fanfou = require('fanfou-sdk');
const Table = require('cli-table2');
const async = require('async');
const chalk = require('chalk');
const pangu = require('pangu');
const ora = require('ora');
const {
CONSUMER_KEY: consumerKey,
CONSUMER_SECRET: consumerSecret,
FANFOU_USERNAME: username,
FANFOU_PASSWORD: password,
HTTPS: https,
REQUEST_LIMIT: requestLimit
} = require('./config');
const ff = new Fanfou({
consumerKey,
consumerSecret,
username,
password,
protocol: https ? 'https:' : 'http:',
fakeHttps: Boolean(https)
});
const xauth = () => {
return ff.xauth();
};
const getFriends = () => {
return ff.get('/friends/ids', {});
};
const getFollowers = () => {
return ff.get('/followers/ids', {});
};
const find1 = async spinner => {
const friends = await getFriends();
const list = [];
return new Promise((resolve, reject) => {
async.eachLimit(friends, requestLimit, (id, callback) => {
ff.get('/friendships/show', {
source_login_name: username,
target_login_name: id
}).then(res => {
if (res.relationship.source.followed_by === 'false') {
const name = res.relationship.target.screen_name;
list.push({
type: 'user',
name,
id
});
spinner.text = `谁没关注你 - ${chalk.green(name)} ${chalk.blue(id)}`;
}
callback();
}).catch(error => {
const name = pangu.spacing(error.message);
list.push({
type: 'error',
name,
id
});
spinner.text = `谁没关注你 - ${chalk.red(name)} ${chalk.blue(id)}`;
callback();
});
}, err => {
if (err) {
reject(err);
} else {
resolve(list);
}
});
});
};
const find2 = async spinner => {
const followers = await getFollowers();
const list = [];
return new Promise((resolve, reject) => {
async.eachLimit(followers, requestLimit, (id, callback) => {
ff.get('/friendships/show', {
source_login_name: username,
target_login_name: id
}).then(res => {
if (res.relationship.source.following === 'false') {
const name = res.relationship.target.screen_name;
list.push({
type: 'user',
name,
id
});
spinner.text = `你没关注谁 - ${chalk.green(name)} ${chalk.blue(id)}`;
}
callback();
}).catch(error => {
const name = pangu.spacing(error.message);
list.push({
type: 'error',
name,
id
});
spinner.text = `谁没关注你 - ${chalk.red(name)} ${chalk.blue(id)}`;
callback();
});
}, err => {
if (err) {
reject(err);
} else {
resolve(list);
}
});
});
};
const run = async () => {
await xauth();
const spinner1 = ora('谁没关注你').start();
const result1 = await find1(spinner1);
spinner1.succeed('谁没关注你 ' + chalk.green(`(${result1.length})`));
const spinner2 = ora('你没关注谁').start();
const result2 = await find2(spinner2);
spinner2.succeed('你没关注谁 ' + chalk.green(`(${result2.length})`));
// Draw Table
const table = new Table({
head: [chalk.white('谁没关注你'), chalk.white('你没关注谁')],
chars: {
mid: '',
'left-mid': '',
'mid-mid': '',
'right-mid': ''
}
});
const lineCount = result1.length > result2.length ? result1.length : result2.length;
for (let i = 0; i < lineCount; i++) {
const line = [
i < result1.length ?
`${result1[i].type === 'error' ?
chalk.bgRed(result1[i].name) :
chalk.green(result1[i].name)} ${chalk.blue(result1[i].id)}` :
'',
i < result2.length ?
`${result2[i].type === 'error' ?
chalk.bgRed(result2[i].name) :
chalk.green(result2[i].name)} ${chalk.blue(result2[i].id)}` :
''
];
table.push(line);
}
console.log(table.toString());
};
run();