過去に作ったソフトウェアのメモ-第一弾-したらば巡回くん(3)

 全13カテゴリーの巡回が終わりました。

得られたこと

1,ブックマークが復活

2,巡回プログラムの改善案を洗い出す

3,その他したらばの情報をいろいろ得た

 

 とりあえず1が最も重要な目的だったので安心です。「したらば掲示板で、前に利用していたAA関連板を全部見つける」というのが主目的でした。アスキーアートに関連する板を絞り出すところがうまく機能せず、最終的にはそれなりの量の板を目視で確認しなければいけなかったのがちょっと惜しい点です。それに加えて、新しく板を300個見つけてしまいました。その内訳的には、AA全レス、AA雑談が殆どで、AA雑談のほうがたくさんあります。…300って多すぎるよ…実を言うとまだ分類しきれていません。

f:id:rennnnnnnnnn:20200601220311p:plain

表1-したらばから抽出したAA関連板のリストの一部



 2の改善案はこのブログでつらつらと書いていったもののことです。今回は全部巡回するのに一週間くらいかかりましたが、今後もスピードより安定性を重視した作りにしていきたいです。今も考案中の手段があって、巡回の安定性を上げて、ローカルな環境に収集したデータを保持するということです。これによって調査しやすくなりますし、サーバーにも負担をかけなくなります。あとは連続アクセスエラー避けに複数のIPアドレスを運用することです。

 

 3は主目的ではなかったので、ちょっと以外ですが、面白い結果が得られたので紹介します。まず、カテゴリー別の終点について出揃ったので紹介します。カテゴリー別での”伸び”がわかると思います。数が多いカテゴリーほど、そのカテゴリーでたくさんの板が作られています。ただし、あくまでも終端であり、「現存する板の数」ではないことに注意が必要です。カテゴリーによっては、閉鎖されている板もたくさんあるのです。ここらへんはまた調べていきたいところです。カテゴリー別の閉鎖されてる/現存する板の内訳とか。

f:id:rennnnnnnnnn:20200601215119p:plain

表2-罫線が一部乱れているけど気にしない

表2だと分かりづらいのでグラフを…。

f:id:rennnnnnnnnn:20200601215511p:plain

図1

なにはともあれ、目視でのチェックが一番めんどくさいです。猫の手も借りたい。

過去に作ったソフトウェアのメモ-第一弾-したらば巡回くん(2)

 主要なカテゴリの巡回が終わったのでそのことについてのメモです。連続アクセスエラーが今回の巡回の問題点です。現在、連続アクセスエラーがでるかどうかギリギリの間隔でアクセスしています。まあそれでも、全部を巡回するのに一週間くらいかかります。seleniumでHTTPヘッダーが取得できれば、簡単に処理できるんですが、どうやらできないらしいです。だから受け取ったWebページのタイトルを見て、連続アクセスエラーかどうかチェックするようにしています。連続アクセスエラーなら実は表示されるページは決まっていますので。しかし、この実装には不足があるようです。どんな不足かというと、連続アクセスエラーかどうか完璧に識別できていないということです。実は先程、連続アクセスエラー時に表示されるWebページは決まっている、と書きましたが、このページ、他のエラーでも表示される場合があるのです。だからこのエラーが出てしまった場合、その後に続く処理を決め打ちで行うことができません。判定する方法が明らかでない2つの場合について、適切な処理を書くことはできません。なにか続きの処理を書いたとしても、当てはまらない場合は例外を出してプログラム全体が止まってしまうでしょう。。。そんなわけでその部分はlogに出力しておいて、私が手作業で確認する方法しかありません。ただそんなめんどくさいことはする気がありません。
 結果的には巡回するべきところを網羅的に巡回することができません。

seleniumからHTTPクライアントへの乗り換えが最優先課題だということが明らかになりました。HTTPクライアントライブラリなら、ヘッダーによって処理を分けるような記述ができるようになります。これによりエラーを確実に取得でき、エラーの場合の処理は決め打ちでできると思います。まあそこはしたらば掲示板がどのような場合にどのようなヘッダーを返すのかもうちょっと調べないといけません。まあいくつか標本を出して、入れそうなことを記述してみます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●タイトル:準備中
・HTTPヘッダーの抜粋
200 OK

date:
Sat, 30 May 2020 02:25:18 GMT
server:
Apache
set-cookie:
ldsuid=202.178.91.9.1590805518603700; path=/; expires=Fri, 28-Aug-20 02:25:18 GMT
accept-ranges:
bytes
access-control-allow-credentials:
true
content-length:
444
connection:
close
content-type:
text/html

・メモ
開設準備中の板ならこれが出るようだ。
30秒後にhttp://rentalbbs.livedoor.comへ飛ぶように設定されている。

・例
https://jbbs.shitaraba.net/business/11008/
https://jbbs.shitaraba.net/business/11305/
https://jbbs.shitaraba.net/business/11306/
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●case1 タイトル:JBBS
・HTTPヘッダーの抜粋
200 OK

date:
Sat, 30 May 2020 02:28:40 GMT
server:
Apache
accept-ranges:
bytes
access-control-allow-credentials:
true
content-length:
195
connection:
close
content-type:
text/html

・メモ
掲示板がユーザーにより閉鎖された場合はこれが出るようだ。
3秒後にhttp://jbbs.shitaraba.comへ飛ぶ。

・例
https://jbbs.shitaraba.net/auto/344/
https://jbbs.shitaraba.net/auto/343/

●case2 タイトル:JBBS
タイトル:JBBSの場合と同じな場合あり。
https://jbbs.shitaraba.net/otaku/1323/

200 OK

●case3 タイトル:したらば掲示

・メモ
この掲示板は停止されました。とのメッセージ

・ヘッダー
200 OK

date:
Sat, 30 May 2020 03:08:36 GMT
server:
Apache
last-modified:
Thu, 05 Feb 2015 06:24:06 GMT
accept-ranges:
bytes
content-length:
1012
access-control-allow-credentials:
true
connection:
close
content-type:
text/html


https://jbbs.shitaraba.net/internet/7223/
https://jbbs.shitaraba.net/internet/7227/

●case4 タイトル:閉鎖済み - したらば掲示

・メモ
この掲示板は閉鎖されています。とのメッセージ

・ヘッダー
200 OK

date:
Sat, 30 May 2020 03:10:34 GMT
server:
Apache
last-modified:
Sun, 17 Jan 2010 15:21:45 GMT
accept-ranges:
bytes
content-length:
588
access-control-allow-credentials:
true
connection:
close
content-type:
text/html

・例
https://jbbs.shitaraba.net/internet/7229/
https://jbbs.shitaraba.net/internet/7231/

●case5 タイトル:一時休止中 - したらば掲示板 :{掲示板タイトル}

・メモ
一時休止中 - したらば掲示板 : …のあとにタイトルが続く
そのためcontent-length:はいろいろな値を取りそう。
あとjavascriptがついてたりついてなかったり

・ヘッダー
200 OK

date:
Sat, 30 May 2020 03:16:01 GMT
server:
Apache
accept-ranges:
bytes
access-control-allow-credentials:
true
content-length:
654
connection:
close
content-type:
text/html


・例
https://jbbs.shitaraba.net/internet/7241/
https://jbbs.shitaraba.net/internet/7327/

●case6 タイトル:livedoor したらば掲示

・メモ
この掲示板は、JBBS管理者権限により停止されました。との

200 OK

https://jbbs.shitaraba.net/otaku/1322/

●case7 タイトル:livedoor レンタル掲示板 : したらば
・メモ
この掲示板は、JBBS管理者権限により一時停止中です。との


https://jbbs.shitaraba.net/computer/156/

200 OK

●case8 タイトル:指定されたページまたはファイルは存在しません

・ヘッダー
403 Forbidden

date:
Sat, 30 May 2020 03:27:42 GMT
server:
Apache
last-modified:
Thu, 06 Dec 2018 15:23:22 GMT
accept-ranges:
bytes
content-length:
1305
access-control-allow-credentials:
true
connection:
close
content-type:
text/html
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
いちばん重要な結果はcase8ですね。これは連続アクセスエラーの場合の内容です。ヘッダーの数字がこれだけ403であるのなら、従来の方法なら使いやそうそうです。具体的には403だった場合は処理を数秒おいてまた開始するなどして、アクセスエラーを回避するなどです。
続いて、各板の状態チェックをhttps://jbbs.shitaraba.net/bbs/api/setting.cgi/[カテゴリ]/[番地]/のAPIを使ってチェックする場合について考えてみましょう。
もし上に上げたcase1~8ですべて403等のエラーのコードを出してくれたのなら、助かります。

●case1
https://jbbs.shitaraba.net/bbs/api/setting.cgi/internet/7223/
403 Forbidden
date:
Sat, 30 May 2020 03:37:30 GMT
server:
Plack::Handler::Starlet
vary:
User-Agent
content-type:
text/html; charset=UTF-8
content-length:
1310
access-control-allow-credentials:
true
connection:
close

●case2
https://jbbs.shitaraba.net/bbs/api/setting.cgi/otaku/1323/
403 Forbidden
date:
Sat, 30 May 2020 03:48:09 GMT
server:
Plack::Handler::Starlet
vary:
User-Agent
content-type:
text/html; charset=UTF-8
content-length:
1310
access-control-allow-credentials:
true
connection:
close

●case3
https://jbbs.shitaraba.net/bbs/api/setting.cgi/internet/7223/
403 Forbidden
date:
Sat, 30 May 2020 03:48:51 GMT
server:
Plack::Handler::Starlet
vary:
User-Agent
content-type:
text/html; charset=UTF-8
content-length:
1310
access-control-allow-credentials:
true
connection:
close

●case4
https://jbbs.shitaraba.net/bbs/api/setting.cgi/internet/7229/
404 Not Found
date:
Sat, 30 May 2020 03:51:09 GMT
server:
Plack::Handler::Starlet
vary:
User-Agent
content-type:
text/html; charset=UTF-8
content-length:
1305
access-control-allow-credentials:
true
connection:
close

●case5
https://jbbs.shitaraba.net/bbs/api/setting.cgi/internet/7241/

403 Forbidden
date:
Sat, 30 May 2020 03:52:41 GMT
server:
Plack::Handler::Starlet
vary:
User-Agent
content-type:
text/html; charset=UTF-8
content-length:
1310
access-control-allow-credentials:
true
connection:
close

●case6
https://jbbs.shitaraba.net/bbs/api/setting.cgi/otaku/1322/
403 Forbidden
date:
Sat, 30 May 2020 03:53:56 GMT
server:
Plack::Handler::Starlet
vary:
User-Agent
content-type:
text/html; charset=UTF-8
content-length:
1310
access-control-allow-credentials:
true
connection:
close

●case7
https://jbbs.shitaraba.net/bbs/api/setting.cgi/computer/156/
403 Forbidden
date:
Sat, 30 May 2020 03:54:34 GMT
server:
Plack::Handler::Starlet
vary:
User-Agent
content-type:
text/html; charset=UTF-8
content-length:
1310
access-control-allow-credentials:
true
connection:
close

●case8
(連続アクセスエラーの場合)
403 Forbidden
date:
Sat, 30 May 2020 03:56:03 GMT
server:
Apache
last-modified:
Thu, 06 Dec 2018 15:23:22 GMT
accept-ranges:
bytes
content-length:
1305
access-control-allow-credentials:
true
connection:
close
content-type:
text/html

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

…一応全部,ステータスコードはエラー系です。ただし、エラーコードだけ見ても連続アクセスが原因なのかは判断が付きません。連続アクセスエラーの場合と同じエラーコード403が色々な場合で出ています。連続アクセスエラーの場合だけ抽出するアプローチは失敗と思いきや、ただ一行だけ、区別できる行がありました。それは「content-type」です。連続アクセスエラーの場合だけ「text/html」となっています。それ以外は「text/html; charset=UTF-8」となっています。今後はこれらの違いを判別方法として巡回する、というのを選択肢にできますね。
ちなみに正しくリソースを取得できた場合の値は「content-type:
text/plain; charset=EUC-JP」です。

ちなみに今回使わせていただいたクライアントアプリは[advanced rest client]というものです。便利だからみんなも使ってみると面白いかも。GUIだからやさしい。

というわけで今回の調査はここまでにしたいと思います。
次ブロクを書くときは、2回めの巡回が終わっていたらその結果を。終わってなかったら適当に雑な事かきます。今回も全部文字になってしまった…まあここらへんの話題は画像が意味を持つような事も特にないのでいいかな…。

過去に作ったソフトウェアのメモ-第一弾-したらば巡回くん(1)

 したらば掲示板では誰でも掲示板を作ることができます。1つ掲示板を作ったとしましょう。その掲示板は18のカテゴリーのどれかに属し、さらにそのカテゴリーの中で1から順番に数字が割り当てられていきます。例えばカテゴリー名internetで100番目に作られた掲示板ならinternetの番号100が割り当てられられます。番号はカテゴリーごとに独立して数え上げられていきます。URLはhttps://jbbs.shitaraba.net/カテゴリー名/番号/の規則で作られています。上の例ではhttps://jbbs.shitaraba.net/internet/100/になります。

 

上の仕様に則って、したらば掲示板を巡回するソフトウェアをかんたんに作ることができました。最初はseleniumの存在を知って、pythonで下書きして、クラスで整理したくなってjavaで書き直すという感じでした。

 

このソフトウェアを使ってすべての板を巡回するのは2回ほどやったことがあります。どちらもアスキーアートに関連がありそうな板をリストアップするためです。PCが壊れてブックマークが消えてしまったので…。

 

○今後の変更点

何を扱えばいいのかがわかってくるにつれて、見えてきたこと。実験的な活動なのでフィードバックを考慮しないとだめだめですよね。まあそれなりに安定して動いているので、変更する気力があまりないのが大きな問題点ですね。

 

・logの洗練

例えばlogを保存したのは良いものの、いつの記録なのかがわからないと不便。思いつきで書いたconsole.logをそのまま出力させているため、機械的に処理しやすい形になっていない場合がある。logを処理する時、数が多いのでプログラムを組んで処理しようとしますが、前文のようでは面倒。

 

・役割の明確化

ソースコードでは、巡回するソフトウェアの部分が1つのクラスに収まっている。まあ設計の時点で適当だったから仕方ないです。これは直したいです。

 

・AA関連板をどう判定するか

巡回はうまくいくとしましょう。となると巡回とは別にどういう板ならリストに上げるか?というのが問題になります。ある板がAAの関連板かの判定は、あるレスがアスキーアートであるかの判定に大きく依存する形となっています。ここの判定もある種の実験的な統計値を設定して、閾値を超えたらリストアップする、という形をとっています。統計値と言ってもあくまでも実験的であり、全く裏付けはありません。ここはどうにかスッキリさせたいです。

 

seleniumからHTTPクライアントへの変更

巡回時にはbrowserを起動して、それをドライバーからアクセスするという設計です。そういった設計が生み出す過程は、必ずしも自動巡回と目的の板のリストアップという目的にフィットするものではありませんでした。javascriptが好き勝手に動いたり、browserとdriverのコネクションがうまくつかなかったりして、エラーで停止…代替案を模索していました。HTTPクライアントならAPIにてリクエストとレスポンスを繰り返すだけなのでうまくいきそうです。ただ前回(1年くらい前)HTTPクライアントで動かした時、ロケールの設定を弄らないと全然反応しなかったのです。pythonからjavaに環境を変えたことで、うまく動くことを祈ります。実際にbrowserを起動するというのは、開発途中は視覚的なフィードバックがたくさんあってよかったです。

 

次回はこのソフトを動かしてみた結果を中心にメモを書いていきたいと思います。

フラッシュ、クラッシュ、トラッシュ

某小説に出てくる韻です。最近はすっかりフラッシュゲームに触れなくなりました。ウェブブラウザで遊べるやつですが、flashPlayer自体が時代の流れでサポート終了ということで。まあそれ以前からフラッシュゲームの類にはあまり触れなくなっていました。ただ時々、ネットをやり始めた初期の頃に遊んだゲームをまたやりたくなるのです。かなり記憶が曖昧なので検索ボックスに何を入れればいいのか迷いつつ、一部思い出のゲームを見つけました。

https://kids.nifty.com/

ニフティキッズで公開されているゲームです。ここらへんのゲームでは脱出ゲームにかなりハマっていた気がします。ゲームを動かすと懐かしいサウンドが…いいですね。

あとまだ探している物があるんですが、なかなか見つかりません。見つかったらまた記録用にURLを貼りたいです。

尽きる

 GW明けです。いつも休み明けは憂鬱です。世界は楽しいもので溢れているという実感が欲しいものです。楽しむために「電波女と青春男」というアニメを見ました。結構好きな作品です。絵が綺麗ですしオカルト感があります。隠されたもの…ってワクワクしますよね。…最近は過去にハマった作品ばかり見ている気がします…今流行っているものではなく。歳を重ねて、無意識のうちに自分の世界を作ってしまったのでしょうか。気になったコンテンツの中でいろいろなものを漁っていくオタク的情熱をまた何らかの形でゲットしないといけません…可能でしょうか。

 前々から作っていたアプリの認証が通りました。たぶんコンセプトとしては悪くないのでしょうが、皆さんの普段遣いのアプリにはなり得ないでしょう。今の所失敗作です。

https://play.google.com/store/apps/details?id=com.club.shitaraba.aaflow&hl=ja

なんでそんな事を言うのかというと、私は見てしまったのです。同じgoogle playで公開されているアプリの紹介用スクリーンショットを。なんと便利そうな…私のは専ブラとしての機能はあまり重視してこなかったのでひどいものです。AAと返信を流れるようにくっつけるというのが一応のアピールポイントではありますが、実際にそれが本当にアピールに使えるかは使用者の意見を聞かないといけません。要するに今の時点で前向きな主張は難しいという…。まあそれでも作りたくて仕方がなかったので試行錯誤です。失敗は強く残りますが成功は曖昧です。

文字列に対してできること

 作成中のアプリのドキュメントを作成中です。ドキュメントと言っても、オープンソース化を視野に入れたソースコードの説明文なので、この作業が日の目を見るのはまだまだ先でしょう。というのも、オープンソース化はある程度フォーマットが整ってからのつもりなので…。ドキュメントの他にも、gitの使い方を覚えないといけませんし、設計指針とかを打ち立てないとフォーマットが整っているとは言えないでしょう。

 とりあえずMVVM+Repositoryアーキテクチャで作っているので、まずはModelのドキュメント化。次にView、次にViewModel…と分けてやっていきたいと思っています。Modelのドキュメント化はこの一週間で終わらせたいです。文書化するのはなかなか大変ですが、今のうちに済ませないと忘れてしまいます。これ、文書化してる最中に、今まで仕様が曖昧だったから変な書き方になってたり、っていうのが結構あります。これらも改善したいところです。

 

環境構築

 アプリのフォーマットがある程度整ったのでリリースすることにしました。これで決定版ということではなく、ベータ版としてフィードバックを受け付けながら改善していきたいという考えです。ただフィードバックをもらえるのかは謎です。今はgoogle playの認証が通るのを待っている状態です。この方がインストールの敷居が下がるかなと。apkを直で出していると「存在を知った」から「インストール」までなかなか行かなそう。

 

今はリモート環境の構築に手間取っています。