Google+で相互フォローを支援するツールを作った

google
相互フォローというか、フォローしてくれてない人のアンフォローなわけですが。

photo-credit: IconAarchive


airgoogleplus




OS:Mavericks

Browser:Google Chrome

Shell:zsh

Terminal:iTerm2





前提として、自身がプロジェクトを作成する必要があります。また、環境によっては、情報を取得できない場合があります。

airgoogleplus


まず、OAuth認証します。

$ git clone https://github.com/syui/airgoogleplus

$ cd !$:t

$ ./!$ gplus-o



ちなみに、認証にはJSONファイルが必要になります。JSONファイルのダウンロード方法は、 airgoogleplus/pngにありますので、わからない人は、確認してみて下さい。


次に、フォローしてくれてない人を特定し、ブラウザで開きます。フォローしてくれていない人、またはフォローしてない人の数が多すぎると、ブラウザが重くなるので注意が必要です。

$ ./airgoogleplus gplus-f



仕組み



フォロー



仕組みは簡単です。APIからフォローしている人のIDを取得します。

$ curl -H "Authorization: Bearer $access_token" https://www.googleapis.com/plus/v1/people/me/people/visible | jq -r '.items[].id' > follow.txt

$ cat follow.txt


ただし、フォロー数が100を超える場合は、ページトークンの処理が必要になってきます。

#!/bin/bash

if [ -e $text/access.txt ]; then

        access=`cat $text/access.txt | jq -r .access_token`
        rurl="https://www.googleapis.com/plus/v1/people/me/people/visible"
        rm $text/follow_id.txt > /dev/null 2>&1
        curl -H "Authorization: Bearer $access" $rurl | jq -r '.items[].id' > $text/follow_id.txt
        ptoken=`curl -H "Authorization: Bearer $access" $rurl | jq -r .nextPageToken`

        until [ "$ptoken" = "null" ]
        do
           rurl="https://www.googleapis.com/plus/v1/people/me/people/visible?pageToken=$ptoken"
           curl -H "Authorization: Bearer $access" $rurl | jq -r '.items[].id' >> $text/follow_id.txt
           ptoken=`curl -H "Authorization: Bearer $access" $rurl | jq -r .nextPageToken`
        done

else

    echo "No Access Token !"

fi

exit


フォロワー



次に、自分をフォローしてくれている人のIDを取得します。

以下のページを haveyou.txt とでも名前をつけて保存します。

view-source:https://plus.google.com/people/haveyou


必要な情報であるIDをコマンドでも言語でもなんでもいいので、それを使って抜き出します。

$ cat haveyou.txt | grep -e "ppv.psn" | head -n 1 | cut  -d '"' -f 6 >> follow.txt

$ cat haveyou.txt | grep -e "ppv.psn" | sed '1d' | cut -d '"' -f 4 | grep -v -e "ppv.psn" >> follow.txt

$ cat follow.txt



フォローしてくれていない人の特定



次に、フォローとフォロワーの情報のうち、差分を抜き出します。

$ sort follow.txt | uniq -u


これがフォローしているのに、フォローしてくれていない人、またはその逆になります。


アンフォローの実行



後はこの情報を元に、アンフォロー、またはフォローしやすいようなシェルスクリプトでも作ると良いです。

#!/bin/bash

if [ -e ./follow.txt ]; then
com="sort follow.txt | uniq -u"
for (( i=`$com | wc -l | tr -d ' '` ; i > 0 ; i-- ))
do
url=`$com | awk "NR==$i"`
url=https://plus.google.com/$url
open -a Google\ Chrome $url
done
else
echo no...follow.txt
fi



ちなみに、アンフォロー、フォローの実行は、有料APIでないとできない感じですね。


したがって、上記では、ブラウザで開くようにしました。


フォローしてくれていない人、フォローしてない人の数が多すぎると、ブラウザが重くなるので注意が必要です。


Google+ APIの全機能を体験するツールを作った - Qiita