SliceHost&ムームドメインで独自ドメインの設定
蛇使いへの道は遠い、、、てことでPythonでWEBアプリ作るのは一時中断。
まずはSliceHostの方のセッティングを完了させて、さくらとサヨナラするのが先決。
ムームードメインでドメインを取得したのでそれをSlicehostで借りてるサーバに向けてみた。
ムームードメイン側の設定
ネームサーバーの設定をやらないといけない。
よそのサーバを借りているので、他業者のネームサーバ設定を選択。
ネームサーバはSliceHostの管理画面のドメイン登録するところに載っているのでそいつをコピペ。
SliceHost側の設定
SliceHostの管理画面へログインし、DNSを選択しnew domeinをクリックしドメインを登録する。
次に登録したドメインへレコードを登録するため、Recordsをクリック。
まだ何も登録されていないので、new recordをクリック。
ここの設定がさっぱりわからんかったので、ドキュメント*1を参考に設定。
ネームサーバとAレコードを設定するみたい。
ネームサーバの設定はこんな感じ
ネームサーバは3つあったので同じように残り二つを登録。
Aレコードの設定はこんな感じ
データのところに自分のサイトのIPを設定すればOK。
サブドメインを登録する場合は、Nameのところにサブドメイン(www.mydomain.comを使いたい場合はwww)を設定すると出来る。
初めてのPython
最初からサーバに入ってるみたいなのでちょいとPython触ってみた。
インデントでブロックを定義するなんて素敵な仕様にほだされ、こいつでWebアプリを作ってみようなんて思ったが最期、地獄のインストール作業の始まり始まり〜
CGIで動かそう
一番手っ取り早く動かせそうな気がしたのでhttp.confを編集。
CGIを動かす設定のコメントを削除!
しても全く動く気配なし。
403!403!日が暮れても403!なもんで断念。
パーミッション755で合ってるよね?
モジュールで動かそう
mod_pythonてのがあればモジュールとして動作するみたい。
早速ソースからmakeしてみるもエラー。さっぱりわからん。
調子乗ってPython3をインストールしたのがいけなかったのか、、、仕方なく元のバージョンに戻してみるも全然ダメ。
モジュールで動かそう2
mod_python以外の選択肢としてmod_wsgiってのがあるみたいなのでそちらをインストール。
が、またしてもエラー。
configureで落ちる。
どうもapxsってのがないみたい。
CentOSはhttpd-develをインストールしなちapxsが入らないそうな。
気を取り直して再挑戦。
が、またエラー。
何がいけないのかさっぱりわからんです。
mod_wsgiとCentOS64bitで何が必要なのか再調査すると、python-develが入ってなかった。
python-develをインストールすると無事インストール完了。
httpd.confにmod_wsgi.soを読み込ませて解決。
なんてことにはならず。Pythonモジュールがロードできないよーなんてエラーが出てる。
もう無理っす。。。
参考サイト:
・http://wiki.minaco.net/index.php?cmd=read&page=Python%2F%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
・http://d.hatena.ne.jp/kuma8/20070430/1177942455
XML_RSSクラスでRSSデータを直接読み込めるみたい
マニュアル読むとコンストラクタの引数にはファイルポインタかファイル名しか設定できないみたい。
それだとレスポンスコードを参照すると、レスポンスボディを一度ファイルに保存するか、再度リクエストをかけるかしなきゃいけない。
出来れば取得したレスポンスボディからXML_RSSを生成出来たらいいなーと思ってソースを読んだら出来るっぽい。
記述はこんな感じ。
require_once( 'HTTP/Request.php' ); require_once( 'XML/RSS.php' ); //RSSの取得先 $url = 'http://****/rss.xml'; $request = new HTTP_Request($url); $request->sendRequest(); $code = $request->getResponseCode(); if( $code == 200 ){ $src = $request->getResponseBody(); }else if( $code == 301 || $code == 302 ){ //リダイレクトの時はリダイレクト先を設定 $src = $request->getResponseHeader('location'); }else{ $src = false; } if( $src ){ $rss = new XML_RSS($src); $rss->parse(); }
これでHTTP_RequestでRSSにリクエストかけてステータスコードを取得した後、レスポンスボディからXML_RSSを生成できる。
いちいちファイルに保存しなくても大丈夫!
SimpleXMLでCDATAが読めない
RSSを取得しようとSimpleXMLを使ったら、CDATAセクションの中身が空っぽに。。。
シンプル過ぎる!
諦めてPEARのXML_RSSを使おうと思ったけど、調べてみたら第三引数にLIBXML_NOCDATAを指定するとCDATAも拾えるみたい。
記述はこんな具合。
$xml = simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA) $xml = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA)
参考:
・SimpleXMLでCDATAを取得したいときはLIBXML_NOCDATAを使う
・PHP: simplexml_load_file - Manual
array_mapでスタティックメソッドを呼び出す
配列の各要素を引数にして関数、メソッドをコールするarray_map関数でスタティックメソッドを使う場合の記述。
class test{ public static function staticMethod( $arg ){ $ret = $arg * 2; return $ret; } } $arg = array(1,2,3,4,5,6,7); print_r(array_map(array(test, 'staticMethod'), $arg));
testクラス内でarray_mapをする場合は、testをselfに変える。
x-jphone-uidは書き換え可能だったような・・・
■ソフトバンクの携帯用GatewayをPCで通る方法があるようです
契約ユーザID(x-jphone-uid)のヘッダ情報はネットワーク側で付与されるので、こちらは偽装が不可能なようです。
PEARのHTTP_Requestなりを使えば簡単に書き換え可能だったような。
こんな具合に書けば好きな値を設定できます。
$url = 'http://ke-tai.org/blog/2009/08/04/softbankgwpc/'; $request = new HTTP_Request( $url ); $request->addHeader( 'X_JPHONE_UID', '243_inari' ); $request->sendRequest();