僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
二つのデータ(空行を含め、同じ行が複数回存在しない前提)から、重複する行を削除するスクリプト。
箇条書きで短く、ある程度メジャーなデータは、
これ(
出典)くらいしか思いつかなかった。
$ cat first
日本国憲法目次
・ 第1章 天皇(1条−8条)
・ 第2章 戦争の放棄(9条)
・ 第3章 国民の権利及び義務(10条−40条)
・ 第4章 国会(41条−64条)
・ 第5章 内閣(65条−75条)
・ 第6章 司法(76条−82条)
・ 第7章 財政(83条−91条)
$ cat second
・ 第4章 国会(41条−64条)
・ 第5章 内閣(65条−75条)
・ 第6章 司法(76条−82条)
・ 第7章 財政(83条−91条)
・ 第8章 地方自治(92条−95条)
・ 第9章 改正(96条)
・ 第10章 最高法規(97条−99条)
・ 第11章 補則(100条−103条)
まず first を出力し、最終行のハッシュ値を保存する。
それから second で同じハッシュ値の次行以下を出力する。
<?php $oldfile = 'first'; $newfile = 'second'; $file = fopen($oldfile, 'r'); for ($line = fgets($file); ! feof($file); $line = fgets($file)) { print $line; $l2 = $line; } fclose($file); $last_hash = hash('md5',$l2); $file2 = fopen($newfile, 'r'); $is_same = 0; for ($line = fgets($file2); ! feof($file2); $line = fgets($file2)) { if ($is_same == 0) { if ($last_hash == hash('md5', $line)) $is_same = 1; } else { print $line; } } fclose($file2); ?>
で、その実行結果。
日本国憲法 目次 ・ 第1章 天皇(1条−8条) ・ 第2章 戦争の放棄(9条) ・ 第3章 国民の権利及び義務(10条−40条) ・ 第4章 国会(41条−64条) ・ 第5章 内閣(65条−75条) ・ 第6章 司法(76条−82条) ・ 第7章 財政(83条−91条) ・ 第8章 地方自治(92条−95条) ・ 第9章 改正(96条) ・ 第10章 最高法規(97条−99条) ・ 第11章 補則(100条−103条)
最終行末に改行文字がない可能性を考えると、rtrimしてからhashすべきか、
とかmd5で十分か、
とか同じ行が複数回出た場合を考えれば行を数える方がいいか、
とかも浮かばなくはない。
が、一旦ここまで。
PHPマニュアルとか、 ちょっと古いかもしれないサイトとかを参考にもげもげ。
まずはデータをJSON形式にエンコード。
<?php $my_ar = array( array( 'name' => 'さとう', 'url' => 'http://www.kuzuore.com/' ), array( 'name' => 'でない誰か', 'url' => 'http://example.com' ) ); $encode = json_encode($my_ar); echo $encode; ?>
読めないデータができた。
[{"name":"\u3055\u3068\u3046","url":"http:\/\/www.kuzuore.com\/"},\ {"name":"\u3067\u306a\u3044\u8ab0\u304b","url":"http:\/\/example.com"}]
で、今度はそれをデコードして、配列に戻す。
<?php $jdata = '[{"name":"\u3055\u3068\u3046","url":"http:\/\/www.kuzuore.com\/"}, {"name":"\u3067\u306a\u3044\u8ab0\u304b","url":"http:\/\/example.com"}]' ; $decode = json_decode($jdata); print_r ($decode); ?>
一応うまくいったらしい。
Array ( [0] => stdClass Object ( [name] => さとう [url] => http://www.kuzuore.com/ ) [1] => stdClass Object ( [name] => でない誰か [url] => http://example.com ) )
json_decode関数の二つ目の引数が、ちょっと気にかかったが、それは後で悩むことにする。
Web上から特定の場所(
スラッシュドット
の最下行近く)の発言を拾って、Twitterに流すだけ。
工夫したところは、既出を避けた点くらいか。
最初に参考にした サイト。 認証モジュールは、 abraham/twitteroauth から借りる。アーカイブから Oauth.php と twitteroauth.php を同じディレクトリに。
Twitter の開発者サイトで、適当に登録。
そこからOAuthのサイトに行って、あれこれやって、各種キーをゲット。
キーは設定ファイルに格納しておく。
フロントエンドはシェルスクリプトでやった。
既出を避けるために、既に送信した呟きは特定ファイルに貯めておく。
wget で取ったWebから特定行を抽出し、sedでタグを抜き、新規ファイルに格納する。
発言が既出かどうかを確認し、既出でなければ追記するとともに、Twitterに
送信する。
一つの*.php に色々書きすぎて、50行もないのに何がなんだかになってしまった。
機能分割は、次回の課題にするか。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。