この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m
そのため情報が古い可能性があります。ご了承ください。m(_ _)m
無いとかなり不便なので、find.2ch.netの結果を変換するスクリプトを書いてみました。
(かなり適当。。。)
#自宅のfreebsdサーバ上で動作することは確認しましたが、
#他で動くかは未確認。(windows, linux, mac OS Xでも動くとコメント有り。)
【2011/11/07 20:58 追記】
php Simple HTML DOM ParserのVersionによっては動作しないとコメント頂きました。
v1.5では白紙状態になるそうです。。v1.11だとOK。
自分で確認した時もv1.11で確認。
【2011/12/29 17:12 追記】 v1.5でも問題ないとか。他要因かな。
【2011/05/07 00:17 追記】
rep2 part51 でバグってると言われる。ゴメンナサイ・・m(_ _)m
799 :名無しさん@お腹いっぱい。:2011/05/05(木) 12:06:27.86 ID:jp3/MRoa0
>>746の方法でtgrepは使えるようになったんだけど、実際の結果が違う場合がある
例えば「muteki」で検索すると、find.2ch.netでは14件だがtgrepは1件のみ。
bbspinkを含む場合は上手く動かないのかな?それとも俺だけですか?
・・・
809 :名無しさん@お腹いっぱい。:2011/05/05(木) 15:50:46.97 ID:0VScl8/m0
まぁBUGつぅか考慮漏れってなら
find.2ch.netは100件表示指定しても最大50件に制限されるので...
diff tgrepc.php.old tgrepc.php
44c44
< $query_params['n'] = $limit = ($_conf['ktai'] || $_conf['iphone']) ? '25' : '100';
---
> $query_params['n'] = $limit = ($_conf['ktai'] || $_conf['iphone']) ? '25' : '50';
ここ50に変えないと検索漏れる位だな
・・・
812 :799:2011/05/06(金) 03:06:01.51 ID:YDWYCun00
>>810
もっとエレガントな書き方はあるかもしれませんが、これでおkでした
diff findproxy.php.old findproxy.php
49c49
< if(ereg('^http://[A-Za-z]+\.2ch\.net/test/.*read\.cgi/.*', $element->href)){
---
> if(ereg('^http://[A-Za-z]+\.(2ch\.net|bbspink\.com)/test/.*read\.cgi/.*', $element->href)){
>>746の方法でtgrepは使えるようになったんだけど、実際の結果が違う場合がある
例えば「muteki」で検索すると、find.2ch.netでは14件だがtgrepは1件のみ。
bbspinkを含む場合は上手く動かないのかな?それとも俺だけですか?
・・・
809 :名無しさん@お腹いっぱい。:2011/05/05(木) 15:50:46.97 ID:0VScl8/m0
まぁBUGつぅか考慮漏れってなら
find.2ch.netは100件表示指定しても最大50件に制限されるので...
diff tgrepc.php.old tgrepc.php
44c44
< $query_params['n'] = $limit = ($_conf['ktai'] || $_conf['iphone']) ? '25' : '100';
---
> $query_params['n'] = $limit = ($_conf['ktai'] || $_conf['iphone']) ? '25' : '50';
ここ50に変えないと検索漏れる位だな
・・・
812 :799:2011/05/06(金) 03:06:01.51 ID:YDWYCun00
>>810
もっとエレガントな書き方はあるかもしれませんが、これでおkでした
diff findproxy.php.old findproxy.php
49c49
< if(ereg('^http://[A-Za-z]+\.2ch\.net/test/.*read\.cgi/.*', $element->href)){
---
> if(ereg('^http://[A-Za-z]+\.(2ch\.net|bbspink\.com)/test/.*read\.cgi/.*', $element->href)){
有難いことに修正イメージも書いてある。
ほぼそのままだけど、tgrep復活したらすぐ戻せるように、tgrepc.phpには極力手を入れたくないから、
↓で修正してみました。ついでにコメントで指摘受けたハイライトの件も。
% diff findproxy.php.old findproxy.php
14a15,17
> $max_count = 50;
> global $limit;
> $limit = $query_array['n'] > $max_count ? $max_count : $query_array['n'];
18c21
< ,'COUNT' => $query_array['n']
---
> ,'COUNT' => $limit
21c24
< $f2query_array['OFFSET'] = (intval($query_array['p']) - 1) * intval($query_array['n']);
---
> $f2query_array['OFFSET'] = (intval($query_array['p']) - 1) * intval($limit);
49c52
< if(ereg('^http://[A-Za-z]+\.2ch\.net/test/.*read\.cgi/.*', $element->href)){
---
> if(ereg('^http://[A-Za-z]+\.(2ch\.net|bbspink\.com)/test/.*read\.cgi/.*', $element->href)){
62c65,66
< $result['profile']['regex'] = '/(.*)/i';
---
> // $result['profile']['regex'] = '/(.*)/i';
> $keyword = explode(" ", $query_array['q']);
> $result['profile']['regex'] = '/(' . $keyword[0] .')/i';
14a15,17
> $max_count = 50;
> global $limit;
> $limit = $query_array['n'] > $max_count ? $max_count : $query_array['n'];
18c21
< ,'COUNT' => $query_array['n']
---
> ,'COUNT' => $limit
21c24
< $f2query_array['OFFSET'] = (intval($query_array['p']) - 1) * intval($query_array['n']);
---
> $f2query_array['OFFSET'] = (intval($query_array['p']) - 1) * intval($limit);
49c52
< if(ereg('^http://[A-Za-z]+\.2ch\.net/test/.*read\.cgi/.*', $element->href)){
---
> if(ereg('^http://[A-Za-z]+\.(2ch\.net|bbspink\.com)/test/.*read\.cgi/.*', $element->href)){
62c65,66
< $result['profile']['regex'] = '/(.*)/i';
---
> // $result['profile']['regex'] = '/(.*)/i';
> $keyword = explode(" ", $query_array['q']);
> $result['profile']['regex'] = '/(' . $keyword[0] .')/i';
findproxy.php.zip (以前の:findproxy.php.old.zip)
【必要なもの】
・rep2 expack
・PHP Simple HTML DOM Parser
【↓こんな構成にしとく必要あり】
rep2/
tgrepc.php
findproxy.php (後述)
simplehtmldom/simple_html_dom.php
・findproxy.php(findproxy.php.zip)
<?php
// {{{ findproxy()
function findproxy($query)
{
require_once './simplehtmldom/simple_html_dom.php';
global $_conf;
// q -> STR
// n -> COUNT
// s -> ???
// b -> ???
// c -> ???
// p -> OFFSET
parse_str($query, $query_array);
$max_count = 50;
global $limit;
$limit = $query_array['n'] > $max_count ? $max_count : $query_array['n'];
$f2query_array = array(
'STR' => mb_convert_encoding($query_array['q'], "EUC-JP","UTF-8")
,'TYPE' => 'TITLE'
,'COUNT' => $limit
);
if(isset($query_array['p'])){
$f2query_array['OFFSET'] = (intval($query_array['p']) - 1) * intval($limit);
}
// print_r($f2query_array);
ini_set('arg_separator.output', '&');
$f2query = http_build_query($f2query_array);
ini_set('arg_separator.output', '&');
// print($query . ' -- > ' . $f2query);
$find2ch = 'http://find.2ch.net/index.php';
$client = new HTTP_Client;
$client->setDefaultHeader('User-Agent', 'p2-tgrep-client');
// print($find2ch . '?' . $f2query);
$code = $client->get($find2ch . '?' . $f2query);
if (PEAR::isError($code)) {
p2die($code->getMessage());
} elseif ($code != 200) {
p2die("HTTP Error - {$code}");
}
$response = $client->currentResponse();
$dom = str_get_html(urldecode($response['body']));
$n1 = 0;
foreach($dom->find('dt') as $dom2) {
foreach($dom2->find('a') as $element) {
if(ereg('^http://[A-Za-z]+\.(2ch\.net|bbspink\.com)/test/.*read\.cgi/.*', $element->href)){
$name = mb_convert_encoding($element->find('text', 0)->plaintext,"UTF-8","EUC-JP");
$urls = parse_url($element->href);
$bbs = $tkey = '';
if(ereg('^/test/read\.cgi/([0-9A-Za-z]+)/([0-9]+)/.*', $urls['path'], $hits)){
$bbs = $hits[1];
$tkey = $hits[2];
}
$result['threads'][$n1]->title = $name;
$result['threads'][$n1]->host = $urls['host'];
$result['threads'][$n1]->bbs = $bbs;
$result['threads'][$n1]->tkey = $tkey;
// $result['profile']['regex'] = '/(.*)/i';
// $keyword = explode(" ", $f2query_array['STR']);
$keyword = explode(" ", $query_array['q']);
$result['profile']['regex'] = '/(' . $keyword[0] .')/i';
if(ereg('\(([0-9]+)\)', $dom2->find('text', 1)->plaintext, $hits)){
$result['threads'][$n1]->resnum = $hits[1];
}
$name = mb_convert_encoding($dom2->find('text', 2)->plaintext,"UTF-8","EUC-JP");
$result['threads'][$n1]->ita = $name;
$n1++;
}
}
}
$result['modified'] = $response['body']['date'];
foreach($dom->find('font') as $element) {
$name = mb_convert_encoding($element->find('text', 0)->plaintext,"CP932","EUC-JP");
if(ereg('([0-9]+)スレ.*', $name, $hits)){
$result['profile']['hits'] = $hits[1];
break;
}
}
return $result;
}
// }}}
?>
// {{{ findproxy()
function findproxy($query)
{
require_once './simplehtmldom/simple_html_dom.php';
global $_conf;
// q -> STR
// n -> COUNT
// s -> ???
// b -> ???
// c -> ???
// p -> OFFSET
parse_str($query, $query_array);
$max_count = 50;
global $limit;
$limit = $query_array['n'] > $max_count ? $max_count : $query_array['n'];
$f2query_array = array(
'STR' => mb_convert_encoding($query_array['q'], "EUC-JP","UTF-8")
,'TYPE' => 'TITLE'
,'COUNT' => $limit
);
if(isset($query_array['p'])){
$f2query_array['OFFSET'] = (intval($query_array['p']) - 1) * intval($limit);
}
// print_r($f2query_array);
ini_set('arg_separator.output', '&');
$f2query = http_build_query($f2query_array);
ini_set('arg_separator.output', '&');
// print($query . ' -- > ' . $f2query);
$find2ch = 'http://find.2ch.net/index.php';
$client = new HTTP_Client;
$client->setDefaultHeader('User-Agent', 'p2-tgrep-client');
// print($find2ch . '?' . $f2query);
$code = $client->get($find2ch . '?' . $f2query);
if (PEAR::isError($code)) {
p2die($code->getMessage());
} elseif ($code != 200) {
p2die("HTTP Error - {$code}");
}
$response = $client->currentResponse();
$dom = str_get_html(urldecode($response['body']));
$n1 = 0;
foreach($dom->find('dt') as $dom2) {
foreach($dom2->find('a') as $element) {
if(ereg('^http://[A-Za-z]+\.(2ch\.net|bbspink\.com)/test/.*read\.cgi/.*', $element->href)){
$name = mb_convert_encoding($element->find('text', 0)->plaintext,"UTF-8","EUC-JP");
$urls = parse_url($element->href);
$bbs = $tkey = '';
if(ereg('^/test/read\.cgi/([0-9A-Za-z]+)/([0-9]+)/.*', $urls['path'], $hits)){
$bbs = $hits[1];
$tkey = $hits[2];
}
$result['threads'][$n1]->title = $name;
$result['threads'][$n1]->host = $urls['host'];
$result['threads'][$n1]->bbs = $bbs;
$result['threads'][$n1]->tkey = $tkey;
// $result['profile']['regex'] = '/(.*)/i';
// $keyword = explode(" ", $f2query_array['STR']);
$keyword = explode(" ", $query_array['q']);
$result['profile']['regex'] = '/(' . $keyword[0] .')/i';
if(ereg('\(([0-9]+)\)', $dom2->find('text', 1)->plaintext, $hits)){
$result['threads'][$n1]->resnum = $hits[1];
}
$name = mb_convert_encoding($dom2->find('text', 2)->plaintext,"UTF-8","EUC-JP");
$result['threads'][$n1]->ita = $name;
$n1++;
}
}
}
$result['modified'] = $response['body']['date'];
foreach($dom->find('font') as $element) {
$name = mb_convert_encoding($element->find('text', 0)->plaintext,"CP932","EUC-JP");
if(ereg('([0-9]+)スレ.*', $name, $hits)){
$result['profile']['hits'] = $hits[1];
break;
}
}
return $result;
}
// }}}
?>
↑のfindproxy.phpを呼ぶため、tgrepc.phpのtgrep_searchに少し手を入れる
function tgrep_search($query)
{
require_once './findproxy.php'; // 追加
return findproxy($query); // 追加
global $_conf;
・・・
{
require_once './findproxy.php'; // 追加
return findproxy($query); // 追加
global $_conf;
・・・
Windows+Apacheの環境で動作確認できました。tGrepが使えなくなって非常に不便を感じていたので、とても助かりました。ありがとうございます!
Windowsでも動く・・・と。(. .)φメモメモ
ありがとうございます。
Linuxでもうごいています。助かりました。
Mac OS X 10.6.7でも動きました。
すばらしいものをありがとうございます!
こちらもLinux、unpush氏のrep2-masterで動作しました
感謝感謝です
Windows7x64で動きました。
ありがとうございます。
検索結果がすべてハイライトになってるのは仕様ですよね?
動けば良いや~。って感じで書いてたので、ハイライトは全く気にしてませんでした。
↓の部分を変更すれば良さそうだけど、、、
元々のtGrepの動作を覚えてない。。。
複数キーワード渡された場合、一つ目のキーワードだけハイライトで良いんだっけ・・・?
であれば、↑の箇所を↓に変更で良いかな・・・?
$result['profile']['regex'] = '/(' . $keyword[0] .')/i';
2つ目以降のキーワードもハイライトする方法は良く分からず。(tgrepc.phpに手入れれば出来るだろうけど。。)
ピンバック: rep2: find.2ch.net | ひねもすのたり
有り難く使わせて頂いております(´∀`)
ハイライト表示もバッチリで最高ですっ!
ありがとうございます
おかげで動きました!
PHP Simple HTML DOM Parserのv1.5では白紙状態だったのですが、
http://sourceforge.net/projects/simplehtmldom/files/simplehtmldom/1.11/
こちらを入れたら動きました
自分も不便に思いこの通りやってみましたが
Parse error: syntax error, unexpected ‘/’ in /****/tgrepc.php on line 342
のエラーが表示され動きませんね。
HTMLDOMは1.1 1.5共にダメでした。
どこがまずかったでしょうか?
tgrepc.phpへの追加。simplehtmldomの配置。findproxy.phpの配置は出来ています。
う~ん・・・なんですかね。。。
342行目のシングルクォートが全角になってたりしないですかね?
自分の環境で、半角から全角に変更した場合、同じエラー「unexpected ‘/’」になりました。
他にはちょっと思い付きません。。
>webmaster
ありがとうございます。
今までOSXにて編集アップロードしてましたが
改めてwinでやり直したところ。無事動きました!
ありがとうございます!
有りがたく使わせて頂きます。
自分の環境では、HTML DOM v1.5で問題なく動いています。
一部の検索結果が抜けるのは
if(ereg(‘^http://[A-Za-z]+\.(2ch\.net|bbspink\.com)/test/.*read\.cgi/.*’, $element->href)){
の正規表現の不足みたいです。 (http://hayabusa3.2ch.net/… とか)
if(ereg(‘^http://[0-9A-Za-z]+\.(2ch\.net|bbspink\.com)/test/.*read\.cgi/.*’, $element->href)){
とりあえず、これで。