最低限求められるスキル
phpインストールして「hello world」表示出来る程度
mysqlインストールして書き込み読み出し、後はソートしたらまあ色々出来る程度
正直今回は細かく教えるって言うよりダラダラやるだけのスレです
完成するかも分かりません
・以前僕が建てたスレ
暇なのでPHPでプログラミング講座やるおー
http://hayabusa.open2ch.net/test/read.cgi/news4vip/1422591541/
ここでphpの講座スレ建てたものだけどit速報にまとめられてたの気づいて見た結果
http://hayabusa.open2ch.net/test/read.cgi/news4vip/1430891351/
何それ
取り敢えずdatの取得部分からやっていきます
まず適当に作業用フォルダ作ります
自分だとxamppの公開用ディレクトリにphpとか適当なフォルダ作ってその中に作業用フォルダを作成しています
取り敢えずファイル名は「open2ch_dat_get」にしました
http://i.imgur.com/NySPgff.png
取り敢えず今回はこのファイルで取得用のphpコード書き込んでいきます
http://i.imgur.com/Ge4KHAj.png
これ入力できたら自分の場合だとxamppの公開用ディレクトリに「php」フォルダ作ってその中に「open2ch_dat_get」ってフォルダ作って作業してるので
「http://localhost/php/open2ch_dat_get/open2ch_dat_get.php」ってブラウザのURL欄に入力して
これが表示されたら取り敢えずおk
http://i.imgur.com/FjIyK1b.png
統計君ってな~にって人は
http://open2ch.net/dev/toukei.cgi?d=2015-10-09
これ見てもらえば分かります。
http://open2ch.net/dev/toukei.cgi?日にちとかサーバー名(VIPならnews4vip)
で過去スレを持ってこれます
http://open2ch.net/dev/toukei.cgi?m=thread&d=2015-10-09&bbs=news4vip
こんな感じで持ってこれます
http://open2ch.net/dev/toukei.cgi?m=thread&d=2015-10-09&bbs=news4vip&sort=time
共有用にコードパッド使ったけどなんかエラー出てるけど気にしない
http://codepad.org/VKUeYUV9
ブラウザでこんな感じで表示されてればおk
http://i.imgur.com/p8y9GjU.png
ライブラリのダウンロードはこっからできます
http://sourceforge.net/projects/simplehtmldom/files/
http://i.imgur.com/FfY2she.png
http://i.imgur.com/qex6rxF.png
そしたら「simple_html_dom.php」をテキストエディタで開いて66行目のMAX_FILE_SIZEの600000って言う数字を適当に増やして保存
http://i.imgur.com/vI2iPl0.png
増やした結果がこちら
http://i.imgur.com/SGaP0ZE.png
http://i.imgur.com/oMxTkrt.png
http://so-zou.jp/web-app/tech/programming/php/library/simplehtmldom/
ライブラリを使って必要なURLだけを表示させてみる
「open2ch_dat_get.php」をこんな感じで改変
http://i.imgur.com/bfdTGN7.png
そいでブラウザで表示してみてこんな感じに取得できてれば成功
http://i.imgur.com/ZHNRug0.png
http://i.imgur.com/SmTAOmx.png
はい、ブラウザで表示するとそこそそこ綺麗に表示されました
http://i.imgur.com/q3lbDY0.png
さて、今日はこれでおしまい
良い子は寝る時間なのでそろそろ寝ます
お休みなさい
取り敢えず終了は20:00頃予定しています
前回まででスレッドの取得は出来たので今回はdatのDLする部分作っていきます。
DLしたdatをDBに保存して、使いやすい様に加工したりしたんだけど、そこまで行けるかは時間的に微妙だと思います。
「oepn2ch_dat_get.php」←昨日まで編集してたやつ
「simple_html_dom.php」←htmlスクレイピングに使えるライブラリ
「test.php」←昨日ここに書き終わってから作ったやつ。色々テスト様に使えるファイルいつも作ってやってるので基本的には用なし。
http://i.imgur.com/oMMFd7K.png
l10って何よって人は「http://hayabusa.open2ch.net/test/read.cgi/news4vip/1444352142/l10」←このURL試してもらえばわかると思うけど最新の10スレだけ持って来いみたいなオプションです。
というわけで、l10だけ取り除くような正規表現を書き込んで表示させてみます。
「oepn2ch_dat_get.php」をこんな感じで書き換える
http://i.imgur.com/fIgFoEW.png
するとこんな感じでURLの一番最後にあった「l10」を取り除いた感じでURLを取り出せます。
http://i.imgur.com/muXbCxf.png
流石に一気に総当りでアクセスするのはあれなんで今回は一個だけ持ってくるように書き換えます。
「oepn2ch_dat_get.php」をこんな感じで書き換える
http://i.imgur.com/tcgtb2E.png
するとこんな感じで表示できる
http://i.imgur.com/QxcX7ra.png
おーぷん2chのHTMLコードをコピーしたものが表示されているだけなので、いつも見ているおーぷん2chが表示されています。
それでここにdatのURLに変換する正規表現を書いてdatに直接アクセスするように書き換えて行きます。
「http://hayabusa.open2ch.net/test/read.cgi/news4vip/1444352142/」のURLを
「http://hayabusa.open2ch.net/news4vip/dat/1444352142.dat」こんな感じで書き換えてやる必要あるので正規表現で板名とスレッドの番号だけ取得する正規表現を考える
2chのURL形式だと「http://鯖名.open2ch.net/test/read.cgi/板名/スレッドの番号/」なんだけどおーぷんの場合は鯖名は飾りだったと思うので無くても取得できます(今後仕様変更でどうなるかは分からない)
なのでdat取得するURL形式は「http://open2ch.net/板名/dat/スレッドの番号.dat」で取得します。
「oepn2ch_dat_get.php」をこんな感じで書き換える
http://i.imgur.com/5BDCRr5.png
するとこんな感じに表示される
http://i.imgur.com/1351KGC.png
そう言えばやるって言ってたっけw
その内誰かやるから大丈夫だよw
ただ全部URLをブラウザで実行して待ってるのはしんどいので、ここからはcmdを使った作業用に書き換えながら作業していきます。
まあ俺も嫌いじゃないけど、使いみちあんま思い浮かばないしな
おんjでもやってる奴居ないのかな?
Pythonは数学系だな
PHPがwebってのは完全同意
pythonが数学ってのは?って感じ
http://i.imgur.com/zzLC292.png
さらにその下の階層にnews4vipってフォルダを作りそこにdatを保存していきたいと思います。
http://i.imgur.com/yzjlazO.png
「oepn2ch_dat_get.php」をこんな感じに書き換えます
http://i.imgur.com/3NyKLuw.png
28行目の「//$dat_text = mb_convert_encoding($dat_text, “UTF-8”, “SJIS”);//SJISからUTF-8にエンコード」ってのはdatはSJIS形式なのでUTF-8に変換しているだけです。
今のとこ問題ないののでコメントアウトしています。
で、実行したらこんな感じで表示される
http://i.imgur.com/JAiS4Qc.png
これはdatファイルをコピーしたやつをブラウザで表示してるだけです
で、今日は最後にこのdatファイルをさっき作った「news4vip」フォルダに適宜保存していく感じの処理を書き込みます。
http://i.imgur.com/hRQhSkQ.png
cmdでphpを実行するときはこんな感じ
http://i.imgur.com/XmUu363.png
ようは実行したい階層に移動して「php 実行したいファイル名.php」みたいな感じです
実際に実行するとこんな感じになって
http://i.imgur.com/V2udHTc.png
取ってきたdatファイルのコピーが生成されております
http://i.imgur.com/aAzt4nv.png
後は全部ダウンロードされると勝手に終了すると思います。
終了待てない人はCtrt+Cで強制終了もできます。
というわけで、今日は時間なので終わりです。
でわでわ
http://codepad.org/dsJdbpF4
今日の予定は21:00です
で、気になったとろこがあるので適当に修正して行きます。
取り敢えず一番気になったとろこfile_get_contentsで、接続するときエラーが出た場合5回くらい接続を試みてそれでも失敗したら強制終了する感じの処理を書き込みたいと思います。
仕組みは単純でweb_get(取得したいURL)みたいな感じでやると成功したらその習得したテキストだったりを返す
失敗したらfalseを返す感じの仕組みです
因みに「file_get_contents」は存在しないテキスト参照したりした場合はfalseを返すのでifなどで判断できます。
後はサーバー側のエラーなんかも取得できるんですけど、その辺は関数化したので後で書き換えてく感じです。
http://i.imgur.com/1ioBrsB.png
そしてfile_get_contentsのところをweb_getに書き換えて
http://i.imgur.com/kgWZFlO.png
実際に稼働させて見て問題なければ多分大丈夫です
http://i.imgur.com/bOdQpF2.png
具体的には時間と統計君のURLを指定したら自動的に持ってくるような感じにします
って言っても殆ど変わってませn
単純に名前付けてそれで終わりです。
http://i.imgur.com/OrCB4zd.png
やったことねーよw
解説サイトその辺にあるから読んだらいいんじゃね
っていうかcakeって必要か?
それなりの規模なら必要だな
趣味グラマーだから大規模な開発なんてやること無いしな
便利になるとは聞いてるけど、PHPにテンプレートエンジンあんま必要性を感じてなくて全然やってないな
効率上がるならやりたいけど
凄い説明しにくいんだけどlampインストールしてれば勝手について来るんでどうにか頑張ってphpmyadminをブラウザで開いて下さいw
色々見せたいんだけど殆ど見せられないので隠してありますがご了承下さい
ログイン画面の左の印のとこをクリックすると新しいデータベースが作れます
http://i.imgur.com/qGd1TMW.png
http://i.imgur.com/ogzLyzX.png
テーブル名とカラム数をこんな感じで指定する感じで作成できます
カラム数は何を保存したいかで変わってくるんですが
今回は「ID(単純に連番でふっていく)」「保存先」「datのファイル名」「スレタイ」「レス数」みたいな感じで5カラムのテーブルを作ります。
http://i.imgur.com/9gNkHDH.png
んでこんな感じでテーブルをざっくり作成
http://i.imgur.com/usTJ5pj.png
あとテーブルをざっくり作成の右下の「保存」の所でテーブル作成できます。
明日はdatを解析してスレタイを抜き取る関数の作成と、時間があったらデータベースに書き込んでいく処理の部分をやってく感じになるかと思います。
でわでわ
http://codepad.org/J7WHfLMS
http://i.imgur.com/Do3BAAn.png
ファイルは変わってないんでまあどうでもいいですね
ライブラリとフレームワークの充実さもそうだけど
なんといってもインタプリタだから
デバッグ超楽なんだよなぁ
そう言えば最近インタプリタとコンパイラとか意識しなくなったな
>>53
まあ適材適所でしょ
GUIに関して言えば、GUIプログラミング自体が面倒くさいし個人的には好かんけど
ビックデータの解析?やった事ないなwwww
>>54
=は代入
==は方は含めないで判断
===は型も含めて同じか判断
型とかあんま考えたくない人は==でいいだろうし、気になる人は===使えばいいんじゃね
小難しく考える必要無いって。適当に生きていきましょうやw
PHPはweb用の言語だからね
ビッグデータの解析とかGUI作成とかには
あまり使われないでしょ?
まあ、web関係ならPHPのほうがやっぱり便利だけどね
itaってのがν速VIPみたいな板名を書き込むカラム
regist_timeってのが登録した時間を書き込むカラムになります
あと、アニメみたいのでもう少し放置しますw
http://i.imgur.com/QeIKntY.png
今日は取得したdatのデータを書き込んで行く関数の作成になります
取り敢えずdb_resist.phpって空のファイルを一つ追加します。
http://i.imgur.com/PJehQOC.png
んで中身をこんな感じで書き込みます
まだデータベースの接続して失敗したかの判断しかしていません
http://i.imgur.com/TICkYMD.png
データベースの書き込み方はmysqliteと大体同じで、sqlってので書き込みます
このスレ「http://hayabusa.open2ch.net/test/read.cgi/news4vip/1430891351/」でスゲー適当に解説してるので分かると思うけど
insertってので大体書き込めます
んで、一からsql書き込んでも良いだけど面倒くさいのでまずphpmyadminってので自動生成してそれを元に書き換えて行きます
それでテーブル開いたら印のところのsqlをクリック
http://i.imgur.com/YYVpDmY.png
このページが開いたら、データベースへの書き込みの時は印のinsertってのをクリック
http://i.imgur.com/W2ASMG3.png
するとこんな感じでinsert文の雛形が出てきます
http://i.imgur.com/EZLV8Kx.png
後はこのinsert文の雛形を書き換えてPHPコードに書き込んでいきます。
で、こんな感じに書き込み関数を編集
http://i.imgur.com/S7vyqA8.png
最後の$dbh->query($query)ってのでクエリー文を実行しています
で、実行した結果がこちら
http://i.imgur.com/rlv8XGS.png
表示ってタブを開くとテーブルに登録されている中身が見れます
IDは自動採番、regist_timeは登録された日にちが自動で登録されるので特に問題ありません
あと、thread_numに0が入ってるけど何でかよく分からないので放置ですw
因みにもう一回実行してみるとこんな感じ
http://i.imgur.com/5V9D7OJ.png
IDの自動採番もちゃんと機能しているので特に問題なさそうです
ここから登録用のちゃんとしたクエリー文を作っていきます。
で、さっきのままのdat_main_regist()だとデータベースに登録したとき文字化けするのでset_charsetでデータベースに登録するときの文字コードをUTF-8に設定しました
全体的に書き換えてこんな感じ
http://i.imgur.com/Q1ODHmC.png
dat_main_regist関数に引数を持たせて登録したい部分だけ自由に決められるようにしました
後は特に変化はありません
で、実際に2,3回起動してみてこんな感じで取り敢えず成功
http://i.imgur.com/GbKNskh.png
赤印の2つはミスったやつなので気にしないで下さい
青印3つみたいになってれば成功です
特に問題無かったので続けます
それでこんな感じに修正
http://i.imgur.com/SEvqaFh.png
スレッドタイトルはdatの解析部分作らないと分からないので適当な文字列で置き換えてます
レス数は正規表現使えば分かると思うけど面倒くさいのでこれも適当な数字で置き換えてます。
それで実行する前に一旦データベースを空にします
空にする方法は該当するテーブルを開いて、操作タブを開いて、テーブルを空にするを押すとテーブルの初期化が出来ます。
http://i.imgur.com/8ujl9Dg.png
データベースが空になったを確認したらopen2ch_dat_get.phpを実行
http://i.imgur.com/Ix3YDAy.png
それでデータベースを確認すると保存された分のdatのデータがデータベースに記録されます
http://i.imgur.com/8jcoYlm.png
今日は時間ないのでここで終わりです
乙乙
open2ch.dat_get.php
http://codepad.org/ig6eRX7K
db_resist.php
http://codepad.org/WcVeaymd
今日はopen2ch.dat_get.phpを編集してdatを解析してレス数とスレタイを抜き出す部分を作っていきます。
まずレス数を抜き出す部分から作っていきます。
それでまずこんな感じの関数を作りました。
http://i.imgur.com/2v9Q9jU.png
explode関数を使うことで特定の文字列を起点に配列に収めることが出来ます。
例えば「1234,456,678」みたいな文字列を「,」で区切って配列に収める事が出来ます。
datファイルの場合、1レスごとに改行してあるので改行の文字コード「n」を起点にして配列に納めています。
デバッグ様にvar_dumpで表示して、exit()で動作を停止しています。
この関数が出来たらtokei_dat_get関数にこんな感じで追加
http://i.imgur.com/rtCl0t3.png
datを取得した直後に追加する感じです
そしたらブラウザ上で実際に実行してみて、表示されたらソースを表示してみてこんな感じになってれば成功
ブラウザによっては表示の仕方が違うかもしれません
因みにChromeで表示しています。
http://i.imgur.com/Doaz8i9.png
array()の数字が配列数を表しており、今回の場合はレス数をだと思って良いいです。
更に大カッコでくくってある「[0]=>string(131)」みたいな奴が配列番号と型と文字数(byte)を表しています。
あとはレス数を返すために配列数をカウントしてその数字をreturnで返してこんな感じにします
http://i.imgur.com/RKXSQjf.png
count()関数で配列数を数えてreturnで返して居るだけです
そしてtokei_dat_get関数のデータベースに登録する部分に取得したレス数を追加するとこんな感じ
http://i.imgur.com/DP0wcxL.png
それでこれを実行すれば多分データベースにレス数も記録できるようになると思いますが
面倒くさいのでスレタイの取得の関数を作ってからやります
因みにdatの何処にタイトルがあるかというと一番最初の行の一番最後にあるので
explodeで一行ごとに分解した0番めの配列の文字をもう一度explodeで「<>」ごとに配列に入れて一番最後は4確定なのでその変数を返すだけです
で、こんな感じの関数を作りました
http://i.imgur.com/70kLpCV.png
で、最後にtokei_dat_get関数にスレタイをデータベースに記録する部分にこんな感じで追加して終わりです。
http://i.imgur.com/i5EdwOC.png
取り敢えずここまででdatを取得してデータベースに保存するって処理の流れは完了です
一旦実行させて、問題ないか様子見たいのでお風呂に入りながら実行させて放置してみます。
でわ、一時休憩です。
http://i.imgur.com/QJLSEay.png
datファイルはsjis形式なのでutf-8にmb_convert_encoding関数でエンコードしてから返す感じにしました
あとレス数を数える関数も、一行分余計な配列入るっぽいんで-1して返すようにしました
http://i.imgur.com/pi64nOf.png
インジェクション対策はプリペアドステートメント使えばどうにでもなるけど、この部分の公開は予定してないから別にいいかなとおもてw
>>68
教えるつもりでやってないしレベルが高いわけでも無いし適当だし見る人居ないのはまあお察し
反応があったと思ったら
こりゃまた手厳しいw
欲を言えばmysqli関数群を直接使うんじゃなくてPDOを使え
あ、出てた
$DatMainTable->save(
array(
‘dir’=>$dir,
‘dat_name’=>$dat_name,
‘thread_name’=>$thread_name,
‘thread_num’=>$thread_num,
‘ita’=>$ita,
)
);
なる程、最初からインジェクション対策は万全な訳ね
http://i.imgur.com/1zY6dZ1.png
あとif文で結果を反転させないとダメでした
こんな感じで書き直しですw
多分これで大丈夫だと思います
http://i.imgur.com/tUac9G0.png
>>77
あと年、月、日を入力してその日を持ってくる感じにするでした
あとxamppも切っちゃダメですw
データベースに書き込まないとダメなんでaptcheとmysqlだけは起動しといて下さいw(別にデータベースなんてコマンドで十分て人はapacheは切っても大丈夫だと思います)
で、こんな感じに修正
http://i.imgur.com/6xxZbqs.png
そいで今日の年月日をコマンドライン引数として持たせることで今日のdatとか持ってこれます
http://i.imgur.com/EUCOBsz.png
データベースも兼ね良好ですね(多分)
http://i.imgur.com/d9AWUtV.png
取り敢えずコマンドライン引数に年と月を入力してその月のdatを持ってこれるように改造しながら結局何作るか考えてみたいと思います
因みにコマンドライン引数ってのは、phpを実行する時こんな感じにオプション的に文字をつけることで値を渡すことが出来るみたいな感じです
http://i.imgur.com/NrDuRRU.png
で、この引数を受け取って色々出来ます
一応いまtest.phpって言うテスト用のファイルあるのでこれで実験的にやってみます
んで、こんな感じの1文かきこんで
http://i.imgur.com/D0E9pRj.png
test.phpに適当な引数を付けて実行してみると
http://i.imgur.com/JAliLni.png
ちゃんと入ってるのが確認できます
これを応用してやっく感じになります
ここから暫くは、多分コマンドメインの操作になると思います
バグとかあると思うけど今日は面倒くさいんで終わりです
一応dat解析して画像をダウンロードする感じのツールに仕上げてみたいと思います
明日は何をするか分かりません
でわでわ
http://i.imgur.com/hddWdR6.png
俺「知りませんがすぐにわかると思います。」
担当者「なぜそう言い切れるの?」
俺「すぐわかるように作られてるのがFrameworkだからです」
不採用
なぜなのか
ZendFrameworkはやってたのに・・・
さぁw
採用担当でもプロでも無いからよく分からんw
複数日持ってくるのが面倒くさいのでその辺を何年の何月から何年の何月までみたいな指定でdatを持ってこれるようにしたいと思います。
今回は標準入力使ってその辺実装していこうと思っています。
で、こんな感じになります。
http://i.imgur.com/g6WNACO.png
fgets(STDIN)ってのでコマンドプロンプトからの入力を受け取ることが出来ます。←これが俗にいう標準入力ってやつ
んで結果はこんな感じ
http://i.imgur.com/lg2Kczi.png
http://i.imgur.com/FTBvScN.png
実行するとこんな感じ
http://i.imgur.com/s5zwHRS.png
大体さっきと同じ結果ですね
「2」を指定するとなんjも持ってこれるような感じです
んでソースの方乗せたいんですけどかなり単純作業になるんで明日うpします
今日はこれで終わりです
時間の処理よく分からなかったので調べながら色々やってました
取り敢えずこんな感じにしてみました
http://codepad.org/nfU5Wh9G
で、変えたところというか標準入力の部分「trim(fgets(STDIN))」にしないと余計なものまで付いてくるのでここ変えました
あと時間の処理の部分なんですが最初
for(年++){
for(月++){
for(日++){
}
}
}
みたいな感じで考えてたんだけど、unixtimeに変換して使えば楽みたいなのでunixtimeで計算しています。
で、実際に実行してみるとこんな感じになります。
入力
http://i.imgur.com/nUq4Ohx.png
実行
http://i.imgur.com/mrS0NJu.png
とこんな感じで特定の日付から特定の日付まで表示してくれます
あとは日付と板を関数に入れて実行すると多分dat取ってこれるんじゃないかなという感じです
以上今日は終わりですw