PHPでデータベース接続とする
環境
OS:Mac
DBMSは MySQL (phpMyAdmin)
phpには接続方法が色々あるがPDOを使ってみる。
前提条件
データベースへアクセスするための(phpMyAdminの)パスワードが分かっている。
(Macなら/Application/MAMP/bin/phpMyAdmin/config.ini.phpで設定・確認できる。)
Xampと設定が似ているのでこの記事 [Mac]xamppセットアップ-これを読めば思い出す-を参考に。
用意したテーブル
他の方がエクセルなどで作っているテーブル定義書テーブル定義の出力(Excel, CSV)を参考に、簡単に次の様なものを作成。
ひとまずパスワードは平文で...。この先で変えていきます...。
PDOとは
PDOとは
PDO(PHP Data Object)とは、PHP標準(5.1.0以降)のデータベース接続クラスのことです。 PHPは標準でMySQLやPostgreSQLやSQLiteなど、色々なデータベースに接続するための命令が用意されています
これで使い方が見えてきた。
PDOはクラスなので、インスタンス化して使う。
データベースの接続にはバックグラウンドでかなり難しい処理がされてるけど、PDO使えば簡単にアクセスできるぜ、兄貴。
PDOの使い方は、もう詳しく書かれているサイトが沢山ある。
とりあえず、公式リファレンスから接続、および接続の管理-PHP マニュアル -を見てみます。
マニュアルから、接続に必要なものがわかる。
インスタンスを生成しているコードを読むと
host :データベースのドメイン名
dbname : アクセスするデータベース名
$user(変数) :データベースのユーザー名
$pass:データベースへ接続するパスワード
を使っているらしい。
PDOでデータベースに接続
以下のようなコードを書いた。
<?php $host = 'localhost:3306'; //127.0.0.1:[ポート番号]でも良い $dbname = 'mac_mamp'; $dbuser = 'root'; $dbpassword = 'root'; try{ $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8","$dbuser","$dbpassword"); echo "SUCCESS"; }catch(PDOException $e){ var_dump($e -> getMessage()); die(); }
公式リファレンスの二番煎じ。
PDO以外の部分を自分なりにまとめる。
try - catch : 例外処理 -> 深刻なエラー(ここではデータベースに接続できない)が生じる場合に実装する。
PDOException : PDOのエラー(データベースに接続できなかった)を表す
$e : PDOException のメッセージが格納される?
$e->getMessage() : $eのメソッドgetMessage()を呼び出す。PDOException のエラー格納場所?
MAMPのhtdocsに上記のphpファイルを置いて接続されるか確認する。
ok
Raspberry Pi 上でLateX を使う
モチベーション
自宅のPC(Windows)とMac Book AirにはLatexを入れている。が、Mac版のTexはOSのバージョン依存が大きい。これじゃ出先で不安だ。 自宅のRaspi3はこんな感じでファイルサーバー兼httpサーバーとして使ってる。 こいつでTexのコンパイルができれば、出先でも落ち着て過ごせる。
インストール
$ sudo apt-get install texlive-lang-cjk xdvik-ja latexmk
数時間かかる
.texのコンパイル
.dviファイルが出力される
div -> pdf
$ sudo dvipdfm [ファイル名].dvi
.pdf ファイルが出力される
あとは、.texを検知して自動でpdf化までできるようにしたい。
参考サイト
1 )ラズベリーパイでTeX
Windowsのコマンドプロンプトの文字コードを自動でUTF-8にする
モチベーション
多くのエディタやLinuxを使うと、文字コードの符号化方式はutf-8が標準になっている。
Windowsの文字コードはshift-JISが標準なので扱いにくい。 コマンドプロンプトの文字コードを自動でutf-8にできたら快適に過ごせそう。
バッチファイルの用意
コマンドプロンプト起動時、自動的に文字コードをUTF-8にして日本語もちゃんと表示できるようにする方法 に書いてあることを丸パクリする。
まず、コマンドプロンプトは chcpコマンドで文字コードを変更できる。
例えば
chcp 932 (shift-JIS)
chcp 65001 (utf-8)
を入力することで、変更できる(自分は毎回chcp65001を入力していた)。
参考サイトに倣って以下のバッチファイルを用意 。 shft-JISで用意したいので、メモ帳を使った。名前は適当に'codeToUtf8.bat'とかで(笑)。
chcp 65001
このバッチファイルを任意の場所に置く。この際、バッチファイルのフルパスをメモしておく。
regedit でCommand Processorを探す
##ここから先は自己責任で##
Windows使ってて初めてみた、regedit。
registry editor の略。 レジストリの内容を弄れるソフトらしい。(レジストリがWindowsにしかない仕様なんて初めて知った。)
regeditを起動し、HKEY_LOCAL_MACHINE -> SOFTEARE -> Microsoft -> Command Processor
とディレクトリを展開してく要領で探していく。
Command Processorにバッチファイルを登録
Command Processor まで到達できたら、その階層で右クリック、新規 -> 文字列値 と選択。 作成できたものを右クリックし、「修正」を選択
名前:AutoRun
値のデータ:バッチファイルのフルパス
を入力。
コマンドプロンプトを立ち上げる
success!
文字コードが65001(utf-8)になっている。 コマンドプロンプトを起動するたびに、バッチファイルが実行され、文字コードが変更されている。
「参考サイト」
slackでいろいろ遊ぶ その1
毎朝天気予報を送信するボットを作る
モチベーション
自宅にはテレビを置いてない。天気予報アプリを見る習慣もない。すると朝玄関を出たら雨でげんなりってことがよくある。
これを見た。
なるほど、毎朝slackに通知を送れば楽しそう。作ってみよう。 言語はPHP。コードは常時稼働してるraspberry pi において、cronで定期実行すればできそうな気がする...。
というか、まずslackのアカウントを作らねば...。
slack api test でテキストを送信する
- tokenの発行
そもそもslackを使うこと自体初めて。なので簡単なところから始める。 slack api からweb apiにいく。 下の方へスクロールすると、「Generate test tokens」がある。これをクリック。 ここで発行されたtokenをメモメモ...。
- api/METHOD のMETHODを決める
web apiによるとapi のurl はhttps://slack.com/api/METHOD らしい...。METHODってなんぞ。
先人の知恵を借りよう。
これを参考に以下のようなコードを書いた。
<?php $baseurl= "https://slack.com/api/chat.postMessage"; $token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //token $channel = "#yyyyyyyy";//投稿したいチャンネル名 $text = 'Hello,Slack!'; $channel = urlencode($channel); $url = $baseurl. '?token=' . $token . '&channel=' . $channel . '&text=' . $text . '&as_user=true';//trueは自分から、falseだとapi testerからメッセージが贈られる。 $json = file_get_contents($url); $json = json_decode($json); print_r($json); ?>
実行すると、ok と返ってくる。また、slackにもテキストが送られた。 そして、METHODの部分は実行したい動作に置き換えるようだ。 ブラウジングしていると、
を見つけた。METHODに当てはめる部分を一覧で見れる。今回はメッセージを送るだけなのでchat.postMessageだけ試した。
livedoor の天気予報apiから予報データを取得
天気データは以下のサイトから頂く。
weather_hacks
http://weather.livedoor.com/weather_hacks/webservice
全国の地点定義表から自分の住んでる地域のidを見つける。 千葉県 千葉 にしたいので、id="120010" だ。
天気情報を取得するコードは以下のようにした。
<?php header('Content-Type: text/html;charset=UTF-8'); $baseurl = "http://weather.livedoor.com/forecast/webservice/json/v1"; $cityid = '120010'; $url = $baseurl . '?city=' . $cityid; $options = array( 'http' => array( 'method' => 'GET', 'header' => 'Content-Type: application/json', ), ); $json = file_get_contents($url,false,stream_context_create($options)); $json = json_decode($json,true); echo '<pre>'; print_r($json); echo '</pre>'; ?>
こんな感じで取得できた。
まとめ
Slackのapiは意外と簡単に使える。また、webに情報も多いのでそれほど困らなかった。 ただ、現状だとテキストを送るだけなのでよりリッチなメッセージを送れる Incoming Webhooks を使ってみたい。
参考サイト
being search apiから検索結果を表示する
環境
windows10,MAMP,vscode,php5.6.24,google chrome
はじめに
最近httpの仕組みがわかってきた。webプログラミングに興味をもつ apiを使って、何か作って見よう!と思った。
何を使おう
googleのapiを使おうかと思った。が、ライブラリ使う必要があるらしいので今回は見送り。 身近なweb検索の結果を自分でも表示したい。=>調べるとbing search apiがあるらしい
使って見る
早速bing serach apiを使ってみようかと思う。
導入
1 developerに登録
2 being search api 5000/month を無料購入
3アカウントキーをメモる
ここまでできたら、先人の知恵を借りる。
PHPからBing Search APIを使って画像を収集する
http://qiita.com/sadapon2008/items/38628ae8266495b3d3a3
Bing Search APIの使い方。月に5000件まで無料で利用できますよ!
https://www.panzee.biz/archives/9401
apiに送るurlの構造はこの人のものを少々変更する。 https://api.datamarket.azure.com/Bing/Search/v1/Web?$format=json&Query=%27%E4%BF%AE%E9%80%A0%27 とする。 以下はコード
MAMPを起動し、 これで表示すると...
...どうやら無事取得できるようだ。
=メモ=
先人の方が使ったurlを見るとapiに飛ばすurlの構造は次のようになっているとわかる。 https://api.datamarket.azure.com/Bing/Search/v1/[検索方法]/[取得する形式]&[検索条件] ここまでわかれば、変数を使ってurlを好きに変更できそう。
理解できていない部分
$this->data=array(
'http' => array(
'request_fulluri' => true,
'ignore_errors' => true,
'header' => "Authorization: Basic $auth",
)
);
request_fuluri ignore_errors は何を示しているのだろう...。 今回はここまで。
httpリクエスト1
○要因
あるサイトのhtmlソースを取得したいとき
<?php $url='http://○○○○.html'; $hmtl=file_get_contens($url); var_dump($html); ?>
で取得できる・・・
とおもっていた。
取得できない場合
failed to open stream: Connection timed out in .....
となる。
なぜだろう...?これは、サーバーから帰ってくる情報を見てみる必要があるな。
○調査
chrome app には便利なものがあって、
Advanced REST client - Chrome ウェブストア
でサーバーからの情報を取得できる。
使えるものはなんでも使おう。
□結果
「httpのステータスが302 Found」になっている。
ググると
302 Found 発見した。リクエストしたリソースが一時的に移動されているときに返される。 Location:ヘッダに移動先のURLが示されている。
なるほど、つまり今回入力したurlはアクセスすると移動する(つまりリダイレクトする)のか!
○考察
file_get_contens()では取得先urlがリダイレクトするようになっているとgetできない。
○次回
file_get_contensは上記のような問題があるので、urlからファイルにアクセスするときは使わない。
代わりの関数を使う
qiita.com
phpにはcurlがあり、この関数はurl先の状態を細かく設定できる。これを使っていく。
<今回はここまで>
数学パズル-Q01
この本がくすぶっていたので、少しずつ進めてみる。
プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問
- 作者: 増井敏克
- 出版社/メーカー: 翔泳社
- 発売日: 2015/10/16
- メディア: Kindle版
- この商品を含むブログ (5件) を見る
phpで書いていく。
Q01