つくってワクワク

こんにちは、OUCC一回生キチガイ枠、おぎしょーです。
twitterIDは@0915h0です。

 

アドベントカレンダーなる楽しそうな催しがあるということで、日頃OUCCに関わる機会がないこともあり、いい機会なので参加してみました。

 

昨日(12/18)はspring_rainingさんの「2016年コミケの旅」でした。
明日(12/20)はtree0_0treeさんが執筆される予定です。

 

 -------------------------------------------------------------------------------------

 

以下本文です。

 

作ったものについて、概要はこんな感じです。

 

What:「ふたばちゃんねる自動巡回&スレ収集アプリ」
Type:常駐コンソールアプリケーション
When:構想1年 制作12/17、12/18
Why:スレを毎日確認するのは正直めどい生活を効率化するため
Language:C#
Editer:visual studio2015

 

以下適当に説明していきます。

 

//ふたばちゃんねる

http://www.2chan.net/

インターネット掲示板の一つで、そこそこ大きくて歴史があります。
もともと2chの避難所として開設されたのですが、独自の形式から独自の進化を遂げたようです。
その特徴としてはデフォでIDがなく完全匿名性であることと、画像掲示板であること、刃牙コラ画像とかミームを多数排出してきたこと、てな感じでしょうか。
絵描きさんが出入りしているため、それ関連で知っている人も多いと思います。
あと気をつけるべきなのが、新参丸出しな人は「お客様」と称され死ぬほど叩かれます。
…僕も新参みたいなモノなので、ここらへんにしておきます。

 

//動機
動機は、ネットやりすぎじゃない?、という疑惑が以前から自分の中にあったからです。
そこで最ものめり込んでいる掲示板巡回を自動化することで生活の効率化が図れ、そして生まれた時間で勉強ができ、IQの向上、ひいてはQOLの上昇につながるだろうと考えたわけです。
ちなみに僕の一日はこんな感じです。

 

f:id:logino:20161219181749p:plain

睡眠時間かな?と思いきやネットです。ブラウザの履歴を見ればだいたい昨日何したかがわかるんです。エロゲと勉強の時間がほぼ変わらないところも見どころです。
エロゲ(ギャルゲ)といえば、最近冬なのでましろいろシンフォニーを1年ぶりにプレイしました。紗凪はもう人間ではないのでは?という疑問が頭をもたげました。女神なのでは?

 

話を戻して、

 

//作成
ダラダラした生活が続き、アプリを作ろうと決意したのは12月。なんとなーくクソみたいな脳内設計はしていたのだが、全く形にはなっていなかった。以下のような3つのアルゴリズムを考えていたのだが、

① 落ちたスレをキャッシュから閲覧できるWebサービスがあるため、なんとかしてそのキャッシュサーバからごっそり取得する。
② ふたばのスレキャッシュを個別に文字列で保存していく。
③ 掲示板トップから、まだ落ちていないスレのURLをコレクションに格納し、
なんやかんやして保存する。

 

①②については検証画面を見たら許容量を超えるjavascriptのわけわからんコードをワッと浴びさせられたので断念。③でやってみることにする。
しかし、HTMLソースからURLを「うまく」抽出する方法がわからず挫折。
そこでバイト先の先輩にこうゆうプログラムを書いてるんですがなんかいい方法ないですかと尋ねると「構文解析」との返答が。
帰ってぐぐったらそれっぽいの(Microsoft C#でのHTML構文解析:CodeZine(コードジン))を発見したため、早速試してみると、うまくいきそう。
Htmlコードの中のタグに含まれた属性の名前と値を自作のAttributeクラスインスタンスに保存してくれるらしい。
いけるやん!ってなったが、気が乗らなかったので未来の自分に託すことにした。

 

 

//仕組み
・掲示板トップページのhtml文字列を変数aに格納
構文解析器を使って、aからスレのURL達を取得した後、それぞれのスレに対してThreadクラスのインスタンスを作成してリストbに格納。
・bの要素となったThreadインスタンスはメンバにスレのhtml文字列を持っており、そこには破棄されるまでの時間が記されている。
なのでそれを解析した後、適切なタイミングでスレをダウンロードする。
その後bからそのThreadインスタンスを外す。
・以上の処理を時間差で繰り返す。

 

//ダイジェスト
・htmをmhtと勘違い
・プロパティってどうやって書くんやったっけ
・数字をcharからbyteにキャストするとなぜか+48される(何故?)
・クラスをうまく設計できない
・例外処理も書けない
・よっしゃ、tryしてcatchするだけでええやろ!
・foreachめっちゃ便利やん…
・timerめっちゃ便利やん…
・clientめっちゃ便利やん…
・string.IndexOF() め(ry
・………(ry
・初心者丸出しなんやな

 

結果的にクソコードになった気がする。まあ動くからいいよね。何処かの誰かが動けばいいって言ってた気がします。はい。

 

できました。

f:id:logino:20161219181732g:plain

 

 

次は2ch巡回アプリを作りたいと思いマス。

 

感想

 自分で作ったプログラムでダウンロードしたスレや画像はきれいでした。
 徹夜したので眠いです、寝ます。おやすみなさい。