2009.02.24

Captchaを破ってココログに付いたSPAMコメントを、ほぼ一掃するRubyスクリプト

最近、Captchaを破ってSPAMコメントが付くようになりました。

とてもウザいのですが、自分のところに付くSPAMコメントには、以下の書式でURLが貼られることが多いようです。

[url=http://hoge.com/] hoge [/url]
[URL=http://hoge.com/] hoge [/URL]

これまでこのブログにコメントをくださった方にはこの書式でリンクを書く人は居なかったので、実績で言うと、この書式のURLが含まれるコメントは100%SPAMです。

ちょっと乱暴ですが、こういう書式のURLが含まれるコメントはSPAMである、という判定をすることにし、機械的に削除することにしました。

この書式が現れないSPAMコメントもあるのですが、こちらは特徴点が無く、機械的な判別が困難なので置いておくことにします。

ウクライナとか、ロシア方面のIPからのコメントだったらSPAM、というやり方でもよさそうですけどね。

RubyとMechanizeを使って自動削除スクリプトを書きました。

このスクリプトをcronなどで定期的に実行して使います。

コメント一覧ページから操作しているので、最初の20件内だけ処理します。 逆を言うと毎回20件見ているので、実行間隔によっては、

「0.upto((comments/'//*[@class="flyout-action-edit flyout-action"]').length - 1) do |i|」

の部分を例えば「0.upto(5) do |i|」などとして、無駄なアクセスが生じないようにするといいかもしれません。

すいませんが、無保証です。 また、自分はココログベーシックなので、FreeやProで動くか分かりません。

コメントを編集するAPIは無いようなので、HTMLの構造に依存するスクリプトです。

リニューアルがあった際には使えなくなると思います。

削除だけの対策だとSPAMコメントが付いた場合にもメール通知が来てしまいウザいので、「新しいコメント書き込みを、記事の投稿者にメール通知する」をオフにした上で、明らかなSPAMは除外した上で、このスクリプトから新着コメント通知のメール送信をしたいところですね。気が向いたら改良します。

#!/usr/bin/env ruby

$KCODE = "u"

require 'rubygems'
require 'mechanize'

# ココログのユーザ名
username = 'あなたのユーザー名'
# ココログのパスワード
password = 'あなたのパスワード'
# ココログのブログID
blog_id = 'あなたのブログID'

app_top = 'https://app.cocolog-nifty.com/'
login_page = app_top + 't/app'
comment_page = login_page + '/weblog/post?__mode=list_comments&blog_id=' + blog_id

agent = WWW::Mechanize.new
agent.max_history = 1
login_page = agent.get(login_page)
login_form = login_page.forms[0]
login_form['username'] = username
login_form['password'] = password
agent.submit(login_form)
comment_page = agent.get(comment_page)
comments = (comment_page/'//*[@id="comments-list"]/table/tbody/tr')

0.upto((comments/'//*[@class="flyout-action-edit flyout-action"]').length - 1) do |i|
  comment_edit_page = agent.get(app_top + (comments/'//*[@class="flyout-action-edit flyout-action"]/span/a/@href')[i].inner_text)
  0.upto((comment_edit_page/'//*[@id="text"]').length - 1) do |j|
    body = (comment_edit_page/'//*[@id="text"]')[j].inner_text
    # puts body.gsub(13.chr, '')
    # コメント本文が正規表現にマッチしたらSPAM
    # [url=http://hoge.com] hoge [/url]みたいな書式が含まれるコメントはSPAM
    if (body =~ /\[[uU][rR][lL]=.+\].+\[\/[uU][rR][lL]\]/) then
      # スパムコメントとして@Niftyに報告しつつ削除
      comment_edit_form = comment_edit_page.forms[1]
      comment_edit_form.status = 'junk'
      comment_edit_form.from = 'edit_comment'
      comment_edit_form.to = 'list_comments'
      agent.submit(comment_edit_form)
      # 初回は以下2行をコメントアウトしてテストした方がいいかも
      # puts "SPAM comment deleted"
      # exit
    end
  end
end

| | Comments (0) | TrackBack (0)

2009.02.15

[iPhone][Jailbreak]テキストエディタgTxtEditJplus 0.91


テキストエディタgTxtEditJplusをバージョンアップしました。
iKeyExのhClipboardがgTxtEditJplusで使えなかったので、使えるようにしました。

その他細々とした修正。

gTxtEditJplus終了時にクリップボードにテキストがある場合は、従来のDynamic Textのほか、hClipboardにもコピーするようにしました。

詳細は、以前のエントリをご覧下さい。

[iPhone]コピー&ペースト機能搭載テキストエディタgTxtEditJplus

gTxtEditJplusはのちなさんがgTxtEditを改造したものですが、前身のTextEdit改造版TextEditJからの流れもあったりして、のちなさんと入れ替わり立ち代わりいじってる感じですね。

[iPod touch]TextEditJ.appを小修正

| | Comments (3) | TrackBack (0)

2009.02.04

[iPhone][Jailbreak]標準入出力とiKeyExのhClipboardのヒストリを橋渡しするstdio2hclip

標準入出力とiKeyExのhClipboardのヒストリとを橋渡しする「stdio2hclip」というものを作ってみました。

Mac OS Xでいえば、pbpaste / pbcopyに当たるものですね。

藤棚工房さんのNSString_FJNStringEncodingを使っているので、入力するテキストのエンコーディングは、UTF-8、Shift-JIS、EUC-JP、ISO-2022JP何でもOKだと思います。ただ、短いテキストであるほど、自動認識に失敗する確率は高まると思います。改行コードも、何でも大丈夫だと思います。

oオプションの動作は、hClipboardの最新のヒストリを標準出力に書き出すというものです。

iオプションの動作は、標準入力からの入力を、hClipboardの最新の項目として登録するというものです。

履歴

Ver.0.2 (2009.02.07)
 ヒストリのリスト機能、ヒストリからの出力機能
 テンプレートへの追加機能追加

Ver.0.1 (2009.02.04)
 初版

コマンドラインオプション

-i 標準入力からhClipboardのクリップボードに登録
-I 標準入力からhClipboardのテンプレートに登録
-l クリップボードのヒストリリストを表示
-L テンプレートのヒストリリストを表示
-h N hClipboardのN番目のクリップボードのヒストリを標準出力に出力
-H N hClipboardのN番目のテンプレートのヒストリを標準出力に出力
-o 最新のクリップボードのヒストリを標準出力に出力
-O 最新のテンプレートのヒストリを標準出力に出力
-? ヘルプ

無指定時はヘルプが表示されます。

使用例

コマンドの出力をhClipboardのヒストリに登録


ls -l | stdio2hclip -i

テキストファイルを登録


cat sample.txt | stdio2hclip -i

Webからダウンロードしたhtml等を登録(lastvisiturl2stdoutを併用すると便利かと思います)


curl www.foobar.com | sed -e 's/<[^>][^>]*>//g' | stdio2hclip -i

hClipboardの最新のヒストリをテキストファイルに書き込み


stdio2hclip -o > output.txt

母艦(この場合はMac OS X)のクリップボードから直接流し込み


pbpaste | ssh -l mobile 100.100.100.100 stdio2hclip -i

iPhoneから直接母艦(この場合はMac OS X)のクリップボードに転送
ただなんでだか改行が消えてしまうので、あらかじめ改行を別のものに置換しておいて、母艦側で戻す?


echo `ssh -l mobile 100.100.100.100 stdio2hclip -o` | nkf --mac | pbcopy

Rubyスクリプトから利用

ココログなどTypePadやMovable TypeにファイルをアップロードするRubyスクリプトから使った例です。

upload_.rb

GoodPic.comさんのエントリ「ブログにXML-RPC APIで、複数のファイルをアップロードするRubyスクリプト」にあるupload.rbを改造させてもらいました。
アップロードしたファイルのURLをクリップボードにコピーするというものです。iPhoneではstdio2hclipを、Mac OS Xではpbcopyを使うようにしてあります(適当な判定ですが)。
個人的にかなり便利に使えそうです。

オリジナルは引数を一つしか見てくれないので、複数の引数を指定できるようにもしました。

インストール

インストールは、いつものCydiaのリポジトリから「stdio2hclip」で検索してください。

|

2009.02.02

[iPhone][Jailbreak]SBSettings用Add-on JPMemoDic Ver.0.4

iPhone上で単語登録をするJPMemoDicをバージョンアップしました。

「/var/mobile/Documens/wordslist.txt」があれば、その内容を取り込むようにしました。

詳しくは下記エントリでどうぞ。

[iPhone][Jailbreak]SBSettings用Add-on JPMemoDic

| | Comments (0) | TrackBack (0)

2009.01.31

[iPhone][Jailbreak]SBSettings用Add-on Post専用Wassr Client FastWassr

SBSettings用Add-on Post専用Wassr Clientを作りました。
名前はFastWassrといいます。

Fastwassr01_2

Fastwassr02


上掲の動画はFastTwitterのものですが、ほぼ同じです。

何がうれしいの?

iPhone用Wassr Clientはまだ1種類しか無くまだまだこれからといったところです。
FastWassrはSBSettings用のAdd-onということで、別のアプリケーションを起動中でも、それを終了させること無く起動できる点が最大のポイントです。

ほとんど起動・終了に手間と時間がかからない(動画参照)ので、ひとりごと多めでWassrを利用している人にはハマる使用感ではないかと思います。


履歴

Ver.0.3
 ウィンドウ表示時に、キーボードが出てくるようにした
Ver.0.2
 入力をクリアする機能、Safariで見た最新のページのURLを貼り付ける機能、再生中の曲のタグを貼り付ける機能を追加。しかしまれにリセットするのでこの機能はひとまず削除
Ver.0.1
 初版

インストール

SBankNotifyと同じCydiaの野良リポジトリからインストールしてください。「FastWassr」という名前で登録してありますので、検索を。

インストール後、respringしてください。
場合によってはハングアップするかもしれないので、その場合はrebootを。

無保証です。

使い方

まずはアカウントの設定をします。
「メモ」で適当に新規メモを作ります。1行目をFastWassrにすることで、タイトルを「FastWassr」にします。大文字小文字も合致していないとだめです。
以降の行を、

user:USER_NAME
pass:PASSWORD

上記のようにして保存します。前後に空白が入らないようにしてください。

Fastwassr03

「メモ」は終了時にデータベースを更新するので、いったんHomeに戻ることを忘れないでください。
何でこんな形式なのかといえば、「設定」の中に設定画面を置きたいものの、作る方法が分からないからです。
技量の問題です。

アカウントの設定が済んだら、SBSettingsからFastWassrを起動してください。

文字を入力して「Update」でstatusをPostできます。

「×」ボタンを押すと、入力内容が保存され、なおかつDynamic Textにも送られます。
「ら、」「p−」でペーストできます。
Dynamic Textについては、LastVisitURLのエントリ辺りを参照してください。

FastWassrへのコピペについて

拙作のLastVisitURL、NowPlaying等を使ってFastWassrにコピペする場合には、一度英語キーボードに切り替えてください。

テーマについて

オリジナルの部品を使いつつ標準の三つのテーマ、しかも同内容のものしか入ってないので、標準のもの以外を使っている場合は、リソースをコピーして対応してください。
「/var/mobile/Library/SBSettings/Themes/Default/」にある「FastWassr/」フォルダを別のテーマのところにコピー、です。

不具合・仕様など

日本語変換をする場合、インライン時は候補のタップで確定できません。
インラインの間は「次候補」ボタンで候補を送って、「確定」ボタンで確定してください。
全画面モードに切り替わってからは候補のタップで選択できます。

FastWassrを表示したままロックすると次のロック解除時に自動的に格納されますが、その後に呼び出した際は操作可能になるまで時間がかかるようです。

この辺りは技術的な制約かと思います。

謝辞

このソフトウェアは、BigBoss氏から提供されたFast Notesのソースコードをベースにしています。
ご協力ありがとうございました。

また、同ジャンルのソフトウェアと位置づけられるmootoh氏のQSTwitterのソースコードを参考にさせていただきました。
いつもありがとうございます。

| | Comments (0) | TrackBack (0)

«[iPhone][Jailbreak]SBSettings用Add-on YAAutoLock