Skip to content

Instantly share code, notes, and snippets.

@unau
Created February 5, 2017 07:12
Show Gist options
  • Save unau/fd65c140e5fb24803081144e9f5171c0 to your computer and use it in GitHub Desktop.
Save unau/fd65c140e5fb24803081144e9f5171c0 to your computer and use it in GitHub Desktop.
facebook の友達数の推移、投稿数の推移を API を使わずに取得する ref: http://qiita.com/unau/items/1147c1748b3a7a3901d1
#!/bin/bash
basedir=/mnt/virya/Downloads/facebook-takeyukikojima
htmldir=${basedir}/html
awk -v today=20170131 -f friends.awk ${htmldir}/friends.htm
# end of file
BEGIN {
RS = ">";
caps["友達"] = "friends";
caps["Sent Friend Requests"] = "sentRequests";
caps["友達リクエストを受信しました"] = "recievedRequests";
caps["Deleted Friend Requests"] = "deletedRequests";
caps["削除した友達"] = "deleted";
caps["ファン:"] = "fan";
caps["Friend Peer Group"] = "group";
if (today != "") {
today_year = substr(today, 1, 4);
today_month = substr(today, 5, 2);
today_day = substr(today, 7, 2);
}
}
match($0, /^(.+)<\/h2$/, a) {
caption = caps[a[1]];
delete m; m[caption] = 1;
next;
}
m["friends"] {
if (! parseNameAndDay($0)) next;
piars[name]++;
from[name] = date;
next;
}
m["sentRequests"] {
if (! match($0, /^(.+) <\/li$/, a)) next;
name = a[1];
piars[name]++;
sent[name]++;
next;
}
m["recievedRequests"] {
if (! parseNameAndDay($0)) next;
piars[name]++;
received[name] = date;
next;
}
m["deleted"] {
if (! parseNameAndDay($0)) next;
piars[name]++;
deleted[name] = date;
next;
}
END {
OFS = ",";
for (name in piars) {
print name, from[name], sent[name], received[name], deleted[name];
}
}
function parseNameAndDay(line) {
if (! match(line, /^(.+) \((.+)\)<\/li$/, a)) return 0;
name = a[1];
date = a[2];
if (date == "今日") {
date = today_year "/" today_month "/" today_day;
} else if (match(date, /^(([0-9]+)年)?([0-9]+)月([0-9]+)日$/, d)) {;
date = (d[2] == "" ? today_year : d[2]) "/" d[3] "/" d[4];
} else {
date = "**" date;
}
return 1;
}
# end of file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment