ヒッキー共同開発に関するページ > 2chブラウザ

2chブラウザ


コンソールの2chブラウザを作るスレッド - 1489736608 - したらば掲示板
http://jbbs.shitaraba.net/bbs/read.cgi/computer/44607/1489736608/l50

発端


ヒッキーのプログラミングするスレ 9 (旧 プログラミング雑談 in HIKIKO) [無断転載禁止]©2ch.net
http://hanabi.2ch.net/test/read.cgi/hikky/1489179773/

117 名前:(-_-)さん[sage] 投稿日:2017/03/17(金) 15:43:47.55 ID:E2DkmN730
go+termboxでcuiの2ch専ブラ作って(>_<)

作る前に発覚した問題点


2chへのアクセスは公式ページによるとAPI必須らしい

開発者の皆さまへ | developer.2ch.net
https://developer.2ch.net/

  • 2chブラウザは2015年からAPIアクセス必須
  • APIアクセスするためには2chからAPIキーを発行してもらう必要がある
  • APIキーはオープンソースには許可が出ない

2ch運営の収入源は
  • 2chに表示される広告収入(現在専用ブラウザにも広告表示をさせてる)
  • 浪人システムによる収入(専用ブラウザの広告非表示やその他色々特典)
  • メロンポイント購入による収入(BEユーザ対象)

(収入源確保のためのAPI導入?)

11 名前:(-_-)さん[sage] 投稿日:2017/03/18(土) 19:18:00 ID:???0
『公開』に関しては2chの収益を阻害しかねないから業務妨害(刑事?)?(でも世の中にアドブロックとか広告表示ブロックのプラグインとか出回ってるしどうなんだろう?)

『開発』に関しては民事?公開してない限り特定はできないし
法律で明確に禁止されてるのはウイルス作成罪(刑事)?
2chの不特定多数に公開されてるデータにアクセスするわけだからスクレイピングは不正アクセス禁止法の対象にはならないし(許可ないAPI利用なら不正アクセスだが)
そもそも不正アクセス禁止法は開発そのものを禁止してるわけじゃないし(実際に不正アクセスするあるいは誰かが不正アクセスできるようしたらアウトって法律だし)

スクレイピングの問題としてはあとは著作権法の問題があるが開発を禁止するものの類じゃない
http://qiita.com/nezuq/items/3cc9772118ad112c18dc
http://qiita.com/nezuq/items/c5e827e1827e7cb29011

あとはクローリング・スクレイピングのアクセス頻度が多いと業務妨害(刑事)になるがこれは頻度少なければよいだけ
(1秒に1回アクセスは前例が出来てしまったためアウト https://media.accel-brain.com/librahack/ )

12 名前:(-_-)さん[sage] 投稿日:2017/03/18(土) 19:24:19 ID:???0
不正アクセス行為の禁止等に関する法律 - Wikipedia
https://ja.wikipedia.org/wiki/%E4%B8%8D%E6%AD%A3%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E8%A1%8C%E7%82%BA%E3%81%AE%E7%A6%81%E6%AD%A2%E7%AD%89%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E6%B3%95%E5%BE%8B#ACCS.E8.A3.81.E5.88.A4

ACCS裁判ってやつ糞すぎなんだけど何これ・・・スクレイピングがアウトになる前例ケースやん・・・



技術的にクリアする方法


  • スクレイピングでデータを取得する (公式ページよると、スクレイピング型の専用ブラウザの開発、公開は禁止)
    • ユーザエージェントをIEとかにする
  • オープンに開発するのではなく、クローズドな環境で開発を進める
    • GitHubで別ブランチで開発する (master以外の、表に出ないブランチで作る)
    • Bitbucketに公開ブランチ作ってもネット検索に引っかからない
    • GitLab.comは非公開ブランチでもコラボレータの人数無制限だからオープンソースにしなくても開発が可能(しかし非公開だと招待がいる)

非公式なライブラリ一覧



masami-dev/chaika-api: chaika (https://github.com/chaika/chaika) に非公式な 2ch API サポートを組み込むプロジェクト
https://github.com/masami-dev/chaika-api


開発時に必要になりそうなパッケージ・ライブラリ


japanese - GoDoc
https://godoc.org/golang.org/x/text/encoding/japanese
(PC版の2chは文字エンコードがShiftJIS)

charset - GoDoc
https://godoc.org/golang.org/x/net/html/charset
(これのDetermineEncodingでダウンロードしたhtmlファイルのエンコーディングを特定できるみたい)

html - GoDoc
https://godoc.org/golang.org/x/net/html
(HTML5限定っぽさそうだけどHTMLタグをパースできる)

http - The Go Programming Language
https://golang.org/pkg/net/http/
(ネット接続用)

設計


type ThreadID int64
 
 type Board struct {
     Name string // 板名 ヒッキー とか
     URL string // 板URL http://hanabi.2ch.net/hikky/ とか、net/urlにURL型あるけどstring型で保持でもいいかも
     // 板URLはスレッド一覧の http://hanabi.2ch.net/hikky/subback.html のほうがいいかも
     ThreadList []ThreadID // スレッドの表示順
     ThreadTable map[ThreadID]*Thread // 各スレッドの情報はThreadIDに紐付けたマップで保持
     LastUpdate time.Time // 最終取得日時
     UpdateCount int // スレ一覧を確認した(取得した)回数
 }
 
 type Thread struct {
     Title string // スレタイ、ヒッキーのプログラミングするスレ 9 とか
     URL string // スレのURL、http://hanabi.2ch.net/test/read.cgi/hikky/1489179773/ とか
     Res []*Response // スレの全レス、nilなら未取得か未ロード
     DownloadedResCount int // ダウンロード済みのレス数
     LastUpdate time.Time // 最終取得日
     LatestCount int // 最新のレス数 ( len(Res)との差分が取得可能なレス数)
     LivingCheckValue // スレ一覧更新のときにこのスレがあった場合にBoardのUpdateCountがコピーされる、過去ログ判定用
 }
 
 type Response struct {
     Name string // レスの名前欄(トリップやワッチョイどうしよう)
     Mail string // レスのメール欄 (普通はsageとかageとか)
     Date time.Time // レスの書き込み時刻
     ID string // レスのID
     Host string // IPアドレスやHost名が出る板とかあるし
     Body string // レスの本文
 }
 
 //スレのhtmlからレスを抽出して返す
 func TakeResponse(r io.Reader) []Response
 

28 名前:(-_-)さん[sage] 投稿日:2017/03/21(火) 00:58:12 ID:???0
スレがスレ一覧から除外されてるかの判定もいるか、過去ログ化判定?

例えば板情報にスレ一覧の取得回数を保持しておき
スレ一覧に存在したスレ情報にそのスレ一覧の取得回数を書き込んでおき
板情報のスレ一覧取得回数と一致する数値を持つスレだけを生存スレで他を過去化って判定するのとか

29 名前:(-_-)さん[sage] 投稿日:2017/03/21(火) 01:01:28 ID:???0
板情報のThreadList []ThreadID は
取得したスレ一覧というより表示順(レス数順とか勢い順とか)を保持したほうが良さそうかな

30 名前:(-_-)さん[sage] 投稿日:2017/03/21(火) 01:11:43 ID:???0
毎回ダウンロードして全データを常にメモリってわけでなく当然パソコン内にダウンロードしたデータを保存するわけで
スレッド一覧やレスを未取得なのか未ロードなのかの区別が必要か
ブラウザ起動のたびに保存してる全データをロードするのは普通しないだろうから
取得済みのレス数とかも保持したほうがよさそう


67 名前:(-_-)さん[sage] 投稿日:2017/03/24(金) 17:31:02 ID:???0
レスの書き込みはクッキー操作やフォームの解析も必要になるから難易度あがりそう

68 名前:(-_-)さん[sage] 投稿日:2017/03/24(金) 17:33:07 ID:???0
レスの書き込みはゴミ箱にJava製のがあるけどこれはまだ使えるのかな?


69 名前:(-_-)さん[sage] 投稿日:2017/03/24(金) 18:40:57 ID:???0
>>68
まだ使えた、これのコード参考にすれば何とかなるのかな



◆画面出力系
板一覧の表示 ... func ShowBoardList()
板(スレ一覧)の表示 ... func ShowThreadList(Board)
スレ(レス)の表示 ... func ShowResponse(Thread)
 
◆通信系
板一覧のダウンロード ... func DownloadBoardList()
スレ一覧のダウンロード ... func DownloadTheadList(Board)
スレ(新着レス)のダウンロード ... func DownloadResponse(Thread)
 
◆データ処理
板一覧のhtmlから板名とURLの抽出 ... func TakeBoardList(io.Reader) []Board
スレ一覧のhtmlからスレ名とレス数とURLとスレの順番の抽出 ... func TakeThreadList(io.Reader) []Thread
スレ一覧の抽出で抽出したデータと現在のデータの統合(マージ)... func MergeTreadList(Board,[]Thread) Board
スレのhtmlからレス(レス番号、名前、メ欄、日付、ID、本文)の抽出 ... func TakeResponse(io.Reader) []Response
レスの抽出で抽出したデータと現在のデータの統合(マージ)... func MergeResponse(Thread,[]Response) Thread
 
◆保存系
板一覧から抽出したデータをファイルに保存 ... func SaveBoardList([]Board)
スレ一覧から抽出したデータをファイルに保存 ... func SaveThreadList(Board)
スレから抽出したデータをファイルに保存 ... func SaveResponse(Thread)
 
◆読込系
保存したファイルから板一覧データの読み出し ... func LoadBoardList() []Board
保存したファイルからスレ一覧データの読み出し ... func LoadTheadList(Board) Board
保存したファイルからスレデータの読み出し ... func LoadResponse(Thread) Thread
 
◆ユーザ入力系
板一覧の表示要求 ... func InvokeShowBoardList()
板一覧の更新要求 ... func InvokeUpdateBoardList()
板(スレ一覧)の表示要求(板の選択)... func InvokeShowThreadList(Board)
板(スレ一覧)の取得要求 ... func InvokeGetThreadList(Board)
板(スレ一覧)の更新要求 ... func InvokeUpdateThreadList(Board)
スレの表示要求(スレの選択)... func InvokeShowResponse(Thread)
スレ(全レス)の取得要求 ... func InvokeGetAllResponse(Thread)
スレ(新着レス)の取得要求(スレの更新要求)... InvokeGetNewerResponse(Thread)
ブラウザの終了 ... func InvokeExit()
 
71 名前:(-_-)さん[sage] 投稿日:2017/03/25() 23:17:44 ID:???0
>>70
あくまで暫定
データをどう保持するか、とか、全体の処理の流れが十分に決まってないから
決まっていくたびに再定義したほうがよさそう
 

79 名前:(-_-)さん[sage] 投稿日:2017/03/29() 23:06:01 ID:???0
[アプリ起動][前処理][画面表示] ←┐ループ
↓       │
[入力待ち]   │
↓       │
[要求された処理]┘
 
80 名前:(-_-)さん[sage] 投稿日:2017/03/30() 07:02:35 ID:???0
[前処理]は
初回起動時は板一覧の取得とか
次回以降は保存されてる板一覧とかの読み込みとか
 

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2017年03月30日 13:57