Created
October 30, 2016 13:34
-
-
Save awn-git/547fd1d92843e7557845d75f9176bcde to your computer and use it in GitHub Desktop.
おーぷん2ちゃんねるのスレ情報やレス情報をオブジェクト形式で取得する
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
////////////////////////////////////////////////////////////////////////// | |
// | |
//@title | |
//@description おーぷん2ちゃんねるのスレ情報をオブジェクト形式で取得する | |
//@include http://*.open2ch.net | |
//@private | |
// | |
//作った人: Awn(@Awn_tw) | |
// | |
//改定履歴 | |
//-20161030(ver 1.0.0): なんとなく作ってみた | |
// | |
//諸注意 | |
//-ご利用は自己責任でお願いします。 | |
//-スクリプトは予告なく修正または廃止されることがあります。 | |
//-コンソールでしか動かない、と思います。 | |
//-悪用は厳禁です。 | |
//-改造改良改悪はご自由にどうぞ。 | |
// | |
////////////////////////////////////////////////////////////////////////// | |
var Op2obj = { | |
info : {}, | |
res : [] | |
} | |
//最終的にこのオブジェクトにデータを突っ込む | |
/* | |
infoはObject形式でスレタイやURLなど | |
resは配列で、配列の要素はオブジェクト形式で | |
レス番号1番から順に、 | |
レス番号 | |
名前 | |
タイムスタンプ | |
ID | |
レス本文 | |
が格納されている。 | |
*/ | |
/* | |
参考 | |
dl要素 : Description List Element | |
dt要素 : Definition Term Element | |
dd要素 : Description Element | |
※詳しくはMDNを見よう -> https://developer.mozilla.org/ja/docs/Web/HTML/Element | |
なお、おーぷん2chのスレの中のレスは、だいたい以下のような構造となっている。 | |
<!-- Content --> | |
<div class="thread"> | |
<dl> | |
<dt></dt> | |
<dd></dd> | |
</dl> | |
<dl> | |
<dt></dt> | |
<dd></dd> | |
</dl> | |
<dl> | |
<dt></dt> | |
<dd></dd> | |
</dl> | |
</div> | |
<!-- /Content --> | |
構造は上記の通りであるが、以下のCaseごとにattributeが若干違うらしい。 | |
[Case: スレを開いた直後またはブラウザの更新ボタン押下時] | |
<dl> | |
<dt res="レス番号"></dt> | |
<dd class="idなんちゃら mesg"></dd> | |
</dl> | |
[Case: 新着レス自動読み込み表示時] | |
<dl class="hide" stype="display: block;"> | |
<dt class="idなんちゃら mesg"></dt> | |
<dd class="idなんちゃら mesg"></dd> | |
<br> | |
</dl> | |
*/ | |
//Op2obj.infoの中身 | |
var _url = document.querySelector("link[rel='canonical'").href; | |
var _hostname = location.hostname; | |
var _bbsname = _url.split("/")[5]; | |
var _surekey = _url.split("/")[6]; | |
Op2obj.info = { | |
url : _url, | |
hostname : _hostname, | |
bbsname : _bbsname, | |
surekey : _surekey | |
} | |
//スレのレスを取得する | |
var _dthread = document.querySelector(".thread"); | |
var _dl = _dthread.getElementsByTagName("dl"); | |
var _dl_len = _dl.length; | |
var _dt = []; | |
var _dd = []; | |
var _dti; | |
//Op2obj.resの中身は以下の情報が格納されている。 | |
var _num; | |
var _name; | |
var _time; | |
var _id; | |
var _text; | |
//dlをdtとddに分解する | |
for(var ix = 0; ix < _dl_len; ix++){ | |
_dt.push( _dl[ix].getElementsByTagName("dt")[0] ); | |
_dd.push( _dl[ix].getElementsByTagName("dd")[0] ); | |
} | |
//dtの中身を更に分解してOp2obj.resに格納する | |
//ddは要素毎にinnerTextしてOp2obj.resに格納する | |
for(var ix = 0; ix < _dl_len; ix++){ | |
_dti = _dt[ix].innerText; | |
_dti = _dti.split(":"); | |
_num = _dti[0].match(/[0-9]*/)[0]; | |
_name = _dti[1].substr(_dti.length-1) === " " ? _dti[1].substr(0,_dti.length-1) : _dti[1]; | |
_time = _dti[2].split(" ID:")[0]; | |
_id = _dti[2].split(" ID:")[1].split(" ")[0]; | |
_text = _dd[ix].innerText; | |
Op2obj.res.push( { | |
num : _num, | |
name : _name, | |
time : _time, | |
id : _id, | |
text : _text | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ちょっといけてないので書き換えます
書き換えというか
抜粋です。
ref: https://github.com/awn-git/Abrowzer/blob/develop/js/sure.js
このスクリプトはどこでなにがどうなる?
注意点?
http://hayabusa.open2ch.net/test/read.cgi/news4vip/1480144511/ を例にとると
news4vip
という文字列(//note: 一般的にはboardname
っぽい。:confused: でもおーぷんのスレ(read.cgi)のscript
タグにはbbs
と書いてある。:confused: )ニュー速VIP
という文字列