OpenShift OnlineからphpのHello Worldアプリを動かす。

AWSの無料枠だといっぱいいっぱいになってきたので、HerokuかOpenShift Onlineを使ってみようといろいろ調べてたら、以下の記事を見つけたのでOpenShift Onlineを使ってみることにしました。
OpenShift Online を利用して静的サイトのホスティング | FAIRWAY Engineer {Blog}

サインアップ

サインアップは以下のURLから。
Create an account | OpenShift Online by Red Hat

アプリケーションの登録

幅広く導入できるようになってるんですね。すごい。Perlがあってよかったです。(白目)
PHP5.4を選択して、特に変更する理由がなかったのでアプリケーションの設定は全部無料枠のデフォルトにしました。

いろんなアプリ

いろんなアプリ


アプリケーションを作ると親切にも公開鍵を登録するためのフォームが出てきます。(私はSettingsから登録しました。)

設定画面

設定画面


至極わかりやすいですね。

gitでアプリケーションのデプロイ

git pushでアプリケーションのデプロイを行うのですが、gitのURLが見つけられなくて5分位探しまわってました。

ここにURLがある

ここにURLがある


横にあるのかよ!と思いました。

あとはドキュメントにあるように、git cloneからのpushでデプロイ完了です。
Modifying Applications | OpenShift Developers
今回はindex.htmlと、Hello Worldだけechoするtest.phpをpushしました。

デプロイ結果

デプロイ結果は以下。
http://php-retrorocket.rhcloud.com/
http://php-retrorocket.rhcloud.com/test.php
Webサーバ何かなぁと思ったのですが、レスポンスヘッダ見るとApacheみたいですね。

HTTP/1.1 304 Not Modified
Date: Wed, 25 May 2016 12:08:23 GMT
Server: Apache/2.2.15 (Red Hat)
Connection: Keep-Alive
Keep-Alive: timeout=15, max=99
ETag: "106ae693-b-533a94fb058c0"

無料で何か動かしてみるにはすごくちょうどいいと思いました。今回はお手軽さ優先でphpでしたが、次はPerl 5.10を導入してMojolicious(::Lite)動かしてみようと思います。
Arukasが正式リリースされた時に無料枠がないならOpenshift onlineを使い続けるかも。

追記

Do-It-Yourself 0.1カートリッジでMojolicious動かすところまで行けたので満足しました。→http://mojolicious-retrorocket.rhcloud.com/
hypnotoadだと権限不足で動かなくてplackup使ったのですが、頑張ったらhypnotoad動かせるのかな…。Can’t create listen socketなのでよくわからないですね。
elasticsearchとkibanaとfluentd動かしてみたいのですが、そこまでするならIaaSじゃないと無理かな…。

TwistOAuthでイカのレギュラーマッチの現在のステージをツイートする。

API初心者ですhttp://splapi.retrorocket.biz/こちらのサイトにあるデータを使… – Yahoo!知恵袋
APIってなんだろう…。Win32APIのことでしたらこちらの動画がチュートリアルとして最適です。
【プログラミング】テトリスを1時間強で作ってみた【実況解説】 – ニコニコ動画:GINZA

splapiが返却するのはただのJSONなので、Web APIどうこうはもはや関係ない気がしましたがどうなんでしょうか。
まずググりながら素のJSON操作→ほしい箇所だけechoするところから始めて、次にTwitterにテスト文字列をツイートして、そこまでできたら下のサンプル読んでみてほしいなぁ、と思いました。

PHPからツイートするのには以下のライブラリがとても便利でした。pharを1ファイルDLで済むのと、それと例外処理でかゆいところに手が届くのが素晴らしいです。(Twitter API自体例外発生時のエラーレスポンスめちゃくちゃなので)
mpyw/TwistOAuth: Advanced PHP Twitter library. (Launched branch v3.x and released stable 3.5.2)
普段Perl使ってるし、PHPはWordPress専用言語だと思ってるので、PHPからTwitter API使うことはもうなさそうですが、機会があればまた使ってみようと思います。(PHP自体使わなすぎてブログカテゴリすら存在しない)

実行マシンはRaspberry Pi2 Model B(OSはraspbian wheezy)を使いました。phpのバージョンは以下。

 xxx@raspberrypi ⮀ ~ ⮀ php -v
PHP 5.4.45-0+deb7u2 (cli) (built: Oct 27 2015 23:22:07)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

注意点として、実行時にPHP Fatal error: Call to undefined function curl_init() が出てしまう場合は、php5-curlをインストールする必要があることくらいでしょうか。
私の環境では上記エラー解消後すぐ動きました。

<?php
 
require_once 'TwistOAuth.phar';
 
define('CONSUMER_KEY', 'xxx');
define('CONSUMER_SECRET', 'xxx');
define('ACCESS_TOKEN', 'xxx');
define('ACCESS_TOKEN_SECRET', 'xxx');
 
// ツイート用オブジェクト作成
try {
    $to = new TwistOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
}
catch (TwistException $e) { 
    echo $e->getMessage() . "\n";
}
 
// JSON取得
$url = 'http://splapi.retrorocket.biz/regular/now';
$json = file_get_contents($url);
 
// 配列化
$array = json_decode($json,true);
$map_array = $array['result'][0]['maps'];
 
// ツイート用文字列作成
$tweet_string = '【現在のレギュラーマッチステージ】';
foreach( $map_array as $value ){
    $tweet_string = $tweet_string ."\n". $value;
}
echo $tweet_string; 
 
// ツイート
try {
    $to->post('statuses/update', ['status' => $tweet_string]);
} catch (TwistException $e) { 
    echo $e->getMessage() . "\n";
}
 
?>

知恵袋に回答してるカテゴリマスターさんが色んな意味で香ばしくてすごかったです。ある程度香ばしくないと起業とか経営ってできないのかもしれないですね。