ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

Twitter for iPhoneに見たくないつぶやきをカットするフィルタ機能を追加(JB不要)

      2016/03/16

Twitterをやっていると、ときどき目にしたくない種類のつぶやきと遭遇します。
それをフィルタする方法はいろいろあるかと思いますが、iPhone上で実現するとなると限られているでしょう。
自分はTwitter for iPhoneを使っているので、Twitter for iPhoneでどうにかする方法を模索してみました。
以下のスクリーンショットは、「shindanmaker」というキーワードを含むつぶやきをカットしている例です。

 

フィルタが効いている方には「shindanmakerのフィルタテスト」というつぶやきが見えていないことが分かります。

(続きは[MORE]から)

世の中にはTwitter API Proxyというものがあります。
Twitterクライアントから、TwitterのAPIに間接的にアクセスするために使われるものです。
主に、中国において金盾を回避する目的で作られ進化しているために、関連キーワードでググると中国語圏のサイトがひっかかります。

Twitter for iPhoneはTwitter API Proxyに対応しているので、
Twitter APIとクライアントの間に介在するTwitter API Proxyを改造すれば、フィルタ機能を実現できそうです。

ベースとなるTwitter API Proxyの選定

最初に目に付いたのがGTAPというTwitter API Proxyです。
しかし、これはXAuthに対応しておらず、Twitter for iPhoneでは使えないようでした。

GTAPをXAuth対応にし、Twitter for iPhoneで使えるようにした派生版としてtwiproxyがあります。
素のまま使ってみたところ、2010.12.8時点のTwitter for iPhoneではtwiproxyを通して認証、使用ができたので、これを改造しました。

参考: twiproxy – 基于GTAP 0.4的twitter API proxy

免責

filtered-twiproxyは無保証です。

filtered-twiproxyのダウンロード

前述のような流れの元、twiproxyに、指定したキーワードを含むつぶやきをカットするフィルタ機能を追加したfiltered-twiproxyを作りました。
ライセンスはApache License 2.0です。

filtered-twiproxy-0.1.tar.gz

filtered-twiproxyのデメリット

Twitter for iPhoneでfiltered-twiproxyを使うと直面する不具合があります。filtered-twiproxyの問題というよりは、元のtwiproxyからそうなのですが。
原因を追究して直すほどのモチベーションは無いので、だれかが修正してくれることを期待します。

  • Push Notificationが設定できない
    • 設定できません。
  • 検索の結果が返ってないことがあり、返ってきたものもフィルタできない
    • 検索結果が返ってこないことがあります。
    • Twitter for iPhoneは検索のみJSONで処理しているようです。とりあえずXMLだけ加工するにとどめる都合で、JSONはフィルタの処理対象外にしています。
  • プロフィールが正常に表示されない
    • 表示されません。自分のも、相手のも。相手が自分をfollowしているかどうかの情報取得も失敗し、常に「〜は〜をfollowしていません」になるようです
  • お気に入りのリストが取れない
    • 取れません。
  • 画像付きの投稿ができない
    • できません。

かなり失うものが大きいです。このほかにもできないことはあるでしょう。

マルチアカウント対応であるTwitter for iPhoneの長所を生かし、filtered-twiproxyを経由しないアカウントと、filtered-twiproxy経由のアカウント、その二つを使い分けるとよいかと思います。

filtered-twiproxyのインストール・設定の概要

Twitter for iPhoneで見たくないつぶやきをカットするためにやるべきこと。

  • Gmailアカウントの取得
  • filtered-twiproxyのGoogle App Engineへの設置
  • Twitter for iPhoneにfiltered-twiproxy経由でアカウントを設定
  • フィルタの設定

順番を追ってやっていきましょう。

Gmailアカウントの取得

Twitter API ProxyはGoogle App Engineに設置するのが習わしとなっているようで、そういう作りになっていたGTAPからのforkであるこれも、Google App Engineで動かす作りになっています。
Google App Engineとは、簡単に言えば、Googleがやっているレンタルサーバのことです。
Google App Engineの利用には、Gmailのアドレスが必要になります。

持っていなければ取得してください。

https://mail.google.com/

filtered-twiproxyのGoogle App Engineへの設置

App Engineアカウントを登録

以下へアクセス。Googleへログインしていなければ、ログインが促されます。

https://appengine.google.com/

「Create Application」ボタンを押すと、それが最初のアプリケーションである場合は認証の手順が入ります。

携帯のメールアドレスを入力しろ、というページに飛びます。
自分はiPhoneで使っているi.softbank.jpのアドレスにしましたが、普通のE-Mailアドレスでもいいという話もあります。

アカウントコードが送られてくるので、それを入力して認証を終了させます。

すると、アプリケーションを作成する画面に移行すると思いますが、とりあえず置いておきます。

Google App Engine SDK for Pythonをダウンロードし、インストール。ターミナルからappcfg.pyコマンドが使えるようにする

http://code.google.com/intl/ja/appengine/downloads.html

Mac OS XではGoogleAppEngineLauncher-1.4.0.dmg(2010.12.12現在)をダウンロード、マウントした後、GoogleAppEngineLauncherを/Applicationsフォルダにコピーし、起動。
初回起動時にシンボリックリンクが/usr/local/binに作られるため、ターミナルからappcfg.pyコマンドが使えるようになります。

Windowsでのインストールについてはこちらのブログを参考にしてください。

爬虫類嫌いのPython日記: Python版GoogleAppEngineのセッティング

新規アプリケーションを作成

さきほどの、アカウントコード入力後に飛んだ、アプリケーションの新規作成ページへ話は戻ります。

何らかの理由でアプリケーション新規作成ページを見失ったならば、以下URLからログインをすればApplication Overviewのページに行くことができます。

https://appengine.google.com/

Application Overviewで「Create Application」ボタンを押し、新規アプリケーションを作成します。「Application Identifier:」の欄に適当なものを指定します。
これがサブドメインになるので、他とかぶらない名前にする必要があります。

ここでは「hogehoge-twiproxy」としたことと仮定します。以降、「hogehoge-twiproxy」と出てきたら、自分が付けたものに読み替えてください。

「Application Title:」欄も適当なものでかまいません。ここでは「Application Identifier」同様「hogehoge-twiproxy」としたことと仮定します。
「Create Application」ボタンでアプリケーションの作成を完了させます。

filtered-twiproxyのアップロード

上記リンクからダウンロードしたfiltered-twiproxy.tar.gzを解凍します。filtered-twiproxyというディレクトリが出来ます。
filtered-twiproxy/app.yamlをテキストエディタで編集します。以下の行を、さきほどの手順で作ったApplication Identifierに書き換えます。

application: xxxx-filtered-twiproxy
↓以下のように書き換え
application: hogehoge-twiproxy

書き換えたらターミナル、ないしコマンドプロンプトからappcfg.pyを実行してfiltered-twiproxyをGoogle App Engineにアップロードします。
事前に、filtered-twiproxyディレクトリがあるディレクトリにカレントディレクトリを移動します。ここでは/Users/username/Desktopにfiltered-twiproxyがあるものと仮定しています。

$ cd /Users/username/Desktop
$ appcfg.py update filtered-twiproxy

Windows、C:にfiltered-twiproxyディレクトリがある場合は、以下のようになるかと思います。

> C:
> python appcfg.py update filtered-twiproxy

「https://hogehoge-twiproxy.appspot.com/」にアクセスし、動作していることを確認します。(サブドメインは自分で設定したものに読み替えてください)

Twitter for iPhoneにfiltered-twiproxy経由でアカウントを設定

Twitter for iPhoneを起動します。
右端のタブをタップ、さらに「アカウント管理と設定」をタップ。

「+」ボタンをタップ、さらに歯車アイコンをタップします。以下のように入力。(サブドメインは自分で設定したものに読み替えてください)

APIルート: https://hogehoge-twiproxy.appspot.com/api/
検索API: https://hogehoge-twiproxy.appspot.com/search/

ナビゲーションバーの「アカウントを追加」で元の画面に戻り、ユーザー名とパスワードを入力。そして「保存」ボタンを押します。
うまくいっていれば、アカウントが追加されるはずです。
このアカウントは、filtered-twiproxy経由でAPIにアクセスするようになっています。

前述の通り、filtered-twiproxy経由でのアクセスでは動かない機能があるので、filtered-twiproxy経由でないアカウントと併用するといいかと思います。

フィルタの設定

これだけでは、検索ができず、お気に入りが見られないだけの出来損ないのアカウントです。
フィルタの設定をしましょう。以下のURLを開きます。(サブドメインは自分で設定したものに読み替えてください)
トップページにある「Config Home」というリンクからもたどることができます。
Googleへのログインを促されます。

https://hogehoge-twiproxy.appspot.com/config

ログインすると、以下のようなページに飛びます。
Keyword、Screen Name、Client Nameとありますが、どれも基本的な機能は同じです。

  • Keyword: つぶやきの内容に応じてつぶやきを見えなくしたい場合に使用
  • Screen Name: だれかのつぶやきを見えなくしたい場合に使用
  • Client Name: 特定のクライアントから投稿されたつぶやきを見えなくしたい場合に使用

操作方法はどれも同じなので、Keywordを例に取って説明します。
「Keyword」のリンクをたどると以下のようなページに飛びます。

「shindanmaker」というキーワードが含まれるつぶやきを見えなくしましょう。
「Keyword:」欄に「shindanmaker」と入力。その下の「Regexp:」のチェックボックスはオフにしておきます。そして、「Add」ボタンを押す。
フィルタの項目が一つ追加されました。

これで、filtered-twiproxyは、つぶやきのどこかに「shindanmaker」が含まれると、そのつぶやきをカットするようになります。ちょうど、冒頭のスクリーンショットのような効能を発揮するようになります。

 

続いて、「#nowplaying」が含まれるつぶやきもカットすることにします。
しかし、「#nowplaying」ハッシュタグは表記に揺れがあります。
「#Nowplaying」「#nowplaying」「#NowPlaying」などの表記が考えられます。
これを一網打尽にしたい場合は、以下のようにします。

つまり、Regexp、正規表現を使ったフィルタリングです。
これをうまく使えば、例えば多段RTを検知してカット、ということもできるでしょう。
Pythonで書かれていますので、詳しくはPythonの正規表現に関する解説を参照してください。

「Screen Name」は、つぶやきの発言者のScreen Nameに対してマッチングを実施します。「Client Name」はクライアント名に対してマッチングを実施します。

一つのつぶやきに対し、「Keyword」、「Screen Name」、「Client Name」のキーワードマッチングを全部実施します。
どれか一つにでも一致したら、そのつぶやきはカットされます。

レシピ例

「Client Name」に対して「なるほど四時じゃねーの」を指定すると、例のなる四時経由でつぶやかれたつぶやきがカットされます。

 - iPhone, Twitter