※実際には、12/5のネタです。
■フォローユーザのCSVがダウンロード出来るらしいので。
※フォロワーの一覧は有料のようなのでご注意を。
手順は以下の通り
http://sachipps.byeto.jp/archives/216
ManageFiltter
http://manageflitter.com/
⇒Debian Lenny+Postgresql8.3
■どんな項目があるか
$ lv -a twitterFollowingBackup2011-12-04.csv | head -1 | sed s/","/"\n"/g | nl | column
1 UserId 6 Real Name 11 Listed
2 You Follow 7 Verified 12 Whitelisted
3 Following Back 8 Followers 13 Inactive
4 Username 9 Following 14 Talkative
5 Profile 10 Tweets 15 Quiet
■3、4で誰がフォローしていないかが分かります
$ lv -a twitterFollowingBackup2011-12-04.csv | \
awk -F\, '{print $3 "," $4}' | grep ^No | wc -l
43
■WindowsでもLinuxでも開けるようにfirefoxを指定
※10ページ毎にタブで開くようにした。
$ lv -a twitterFollowingBackup2011-12-04.csv | \
awk -F\, '{print $3 "," $4}' | grep ^No | awk -F\, '{print $2}' | \
for list in `xargs`;do \
echo "\"http://twitter.com/#/${list}\""; \
done | awk '{if (NR % 10 == 1) {print "firefox " $1} else {print $1}}' | \
xargs echo -n | sed s/"firefox"/"\n&"/g > list.bat
■Windows版は以下のように。
※パスが通って無い場合は、一行目に自身の環境に合わせて
「cd {Mozilla Filefox install path}:\」を入れる
$ nkf -s -Lw -c twitter_list.bat > list.bat
■chromeの場合
※メモ帳で「firefox」を「chrome」に置換。
「cd {Google chrome install path}:\」を入れる
■linuxの場合
一行目に「#!/bin/bash」とでも入れる。
「whereis firefox」でパスが通っているか、
そもそもインストールされているか、
sshならX転送を許可しているか等を確認して
「chmod +x」で実行件を与えて実行。
■見て納得したなら閉じるw
■postgresqlに入れる
どんな項目があるかで、列が15で在ることは分かっているので、
文字数の最大値を求める
※結構時間がかかるが、自分で数えるよりは良い。
【条件】
列は1から15まで(1行目)
CSVの一行目にある「列の名前:」を表示する(2行目)
ファイルを読み込み、awkで該当列のみ表示する(3行目)
半角スペースや「'」は「_」に変換(エスケープ)する(4行目)
行をfor文に渡す(5行目)
行をバイトカウントする(6行目)
小さい順に数値として並べ替え、一番最後(最大値)を取り出す(7行目)
16で割って1を足し、小数点以下を切り捨て、16倍する(8行目)
※16で割った余りが0でも1を足す
$ for num in `seq 1 15`;do \
echo -n `head -1 ${filename} | awk -F\, '{print $'${num}' ":" }'`; \
lv -a ${filename} | awk '{print $'${num}'}' | \
sed s/" "/"_"/g | sed s/\'/"_"/g | \
for list in `xargs`;do \
echo "$list" | wc -c; \
done | sort -n | tail -1 | \
awk '{print (int($1/16+1)*16)}'; \
done
UserId:144
You Follow:64
Following Back:64
Username:64
Profile:48
Real Name:48
Verified:16
Followers:16
Following:16
Tweets:16
Listed:16
Whitelisted:16
Inactive:16
Talkative:16
Quiet:16
■psqlに取り込めるように整形する
$ echo `echo "CREATE TABLE twitterdb(=EOF=";echo 'UserId:144
You Follow:64
Following Back:64
Username:64
Profile:48
Real Name:48
Verified:16
Followers:16
Following:16
Tweets:16
Listed:16
Whitelisted:16
Inactive:16
Talkative:16
Quiet:16' | sed s/" "/"_"/g | \
sed s/":"/" char("/g | sed s/"\$"/"),=EOF="/g ; \
echo ");"` | sed s/"=EOF="/"\n"/g > psql_twitter.sql
■最後の行の「,」を削除する
$ cat psql_twitter.sql
CREATE TABLE twitterdb(
UserId char(144),
You_Follow char(64),
Following_Back char(64),
Username char(64),
Profile char(48),
Real_Name char(48),
Verified char(16),
Followers char(16),
Following char(16),
Tweets char(16),
Listed char(16),
Whitelisted char(16),
Inactive char(16),
Talkative char(16),
Quiet char(16)
);
■DBに取り込む
$ psql -f psql_twitter.sql
■取り込みの確認
$ echo "select username from twitterdb" | psql -d postgres
username
----------
(0 rows)
■CSVを取り込む
$ su root -c 'sudo nkf -w twitterFollowingBackup2011-12-04.csv | \
sed s/","/"\",\""/g | sed s/"^"/"\""/g | sed s/"\$"/"\""/g > twitterdb.csv'
パスワード:
$ sudo chown postgres:postgres twitterdb.csv
■703件も最後の列に何も無い行がありました。
$ cat /home/labunix/twitterdb.csv | \
awk -F\, '{print $1 "," $15}' | nl | \
grep -v "\"Yes\"\|\"No\"" | wc -l
703
■空列も無視して、15列まで強引に作成する
$ awk -F\, '{print $1 "," $2 "," \
$3 "," $4 "," $5 "," $6 "," $7 "," $8 "," $9 "," $10 "," \
$11 "," $12 "," $13 "," $14 "," $15}' twitterdb.csv > 1.csv
$ echo "COPY twitterdb FROM '/var/lib/postgresql/1.csv' WITH CSV;" | psql
COPY 4111
■見出し行を探す
$ echo "select username from twitterdb where username=' Username'" | psql
■見出し行の削除
$ echo "delete from twitterdb where username=' Username'" | psql
DELETE 1
■シェルの助けを借りないと意外と面倒
$ echo "select username,profile from twitterdb" | psql -A -F, | sed s/" "//g | head -1
username,profile