2013年08月26日

[Web] AWSを使ってみる APHPでPOSTして外部APIを使ってみた

EC2のインスタンスを立ち上げて、無事Webサイト(index.html)が表示されました。
次は、PHPを使ってみます。

ここでの流れは、この通り。

@PHPから外部APIを呼ぶ
A返ってきた値(JSON)をパースする
B欲しいデータを表示する



@PHPから外部APIを呼ぶ
細かい説明は抜きにして、コードです。
※[]で囲った部分は適宜書き換える必要があります
===========================================
<?php

// 外部APIのURLを指定
$url = '[APIのURL]';

// おまじない
$data = array(
'pattern' => 'htmlspe',
'show' => 'quickref',
);

// おまじない
$headers = array(
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.strlen(http_build_query($data))
);

// 外部APIにはPOSTするので!
$options = array('http' => array(
'method' => 'POST',
'content' => http_build_query($data),
'header' => implode("\r\n", $headers),
));

// $json に外部APIの結果が保存される
$json = file_get_contents($url, false, stream_context_create($options));
===========================================
ここで、
print $json;
とすると、返ってきた中身が確認できます。

【参考】
とても簡単にPHPからPOSTリクエストを送信する方法【PHP】


A返ってきた値(JSON)をパースする
B欲しいデータを表示する

外部APIの返り値がJSONの場合、欲しい値を取得するにはパースする必要があります。
===========================================
// @の続き
// JSONをデコードして配列に入れる
$obj = json_decode($json, true);

// foreachで辿りながら欲しい情報を取得する
// JSONの階層が4つまである場合
foreach ($obj as $key => $value) {
// 第1階層
echo "$key -> $value";
foreach($value as $key => $value) {
// 第2階層
echo "$key -> $value";
foreach($value as $key => $value) {
// 第3階層
echo "$key -> $value";
foreach($value as $key => $value) {
// 第4階層
echo "$key -> $value";
}
}
}
}

?>
===========================================
PHPには json_decode() といった便利な関数があるのですね。
デコードした後は、欲しい情報がある階層まで掘り下げて検索していきます。

【参考】
twitterの検索結果をphpでjson使って表示する【たった7行】

ちなみに、JSONはそのままだと文字が並んでいて読みにくいので、
こちらの整形サービスを利用することをオススメします。

JSON整形サービス

よーし、次だー。
posted by be-style at 19:34| Comment(0) | Web

2013年08月25日

[Web] AWSを使ってみる @EC2とRDSの立ち上げ

忘れない内に備忘メモとして残しておきますー。

Unityアプリでサーバー連携をやろうと考えています。
現在はさくらVPSですが、最近、AWS(Amazon Web Service)が気になってます。

AWSにすることのメリットは

・アクセス状況によって資源を増減できる
→アクセス数が多い日が予想できたら、サーバーを増築できる ※自動で!
→さくらVPSだと固定なので、プラン変更が必要だしデータ移行が必要

・アプリ向けサービスが増えてきそう
→プッシュ通知の仕組みを自前で用意するのは大変だけど、最近AWSで簡単にプッシュ通知を
 使えるサービスが登場しました
 http://www.atmarkit.co.jp/ait/articles/1308/19/news081.html

現在は、最小プランで750時間(約1ヶ月)が無料で試せるということで
調べるよりも体験した方が早そうなので早速AWSを触ってみることにしました。

無料枠について:
http://aws.amazon.com/jp/free/

早速、参考書を購入。
よくわからない!
ハードルが高かったようです orz

ということで、初心者向けのサイトを発見!
これはわかりやすかったです。

ドットインストール Amazon Web Services入門:
http://dotinstall.com/lessons/basic_aws

これを見ながら、EC2とRDSのインスタンスを立ち上げました。
ただし、管理画面が現在のもと若干違うので、

#11 スペック変更とEC2からの接続

でのSecurity Groupの設定(EC2) については、画面左側になります。

aws001.png


■今回のおおまかな流れ
@EC2でインスタンス(Webサーバー)を立ち上げる
 →SSHでログイン
 →Apache、PHP、MySQLのインストール&起動
 →各種設定
ARDSでインスタンス(mySQL)を立ち上げる
BEC2からRDSに接続する
 →MySQLコマンドがドットインストールと違うので注意!


■詳しく!
@EC2でインスタンス(Webサーバー)を立ち上げる
・EC2の立ち上げはドットインストールのとおり
・SSH接続で使用する証明書は、ダウンロード後に権限を「400」に変更する!

●EC2にSSHでログインするときのコマンド ※インスタンス右クリック「Connect > Connect with a standalone SSH Client」
$ ssh -i [証明書] ec2-user@xx.xx.xx.xx

・Apacheのインストール ※-y を付けることで、yを入力する手間を省く
$ sudo yum -y install httpd

・Apacheスタート、自動起動設定
$ sudo service httpd start
$ sudo chkconfig httpd on

・ブラウザからアクセスしたときに表示するHTMLを編集
$ sudo vim /var/www/html/index.html
【参考】vi コマンドリファレンス

・PHPインストール、バージョン確認
$ sudo yum -y install php
$ php -v

・MySQLインストール、バージョン確認
$ sudo yum -y install mysql
$ mysql --version

・PHPからMySQLを使えるようにするためのライブラリをインストール
$ sudo yum -y install php-mysql

・使うかわからないけど、ライブラリをインストール
$ sudo yum -y install php-gd
$ sudo yum -y install freetype-devel
$ sudo yum -y install php-mbstring
$ sudo yum -y install php-xml
$ sudo yum -y install libcurl-devel
$ sudo yum -y install php-mcrypt

・タイムゾーンを日本に設定
$ date
2013年 8月 25日 日曜日 04:29:02 UTC ←デフォルト
$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime ←タイムゾーンを日本に変更
$ date
2013年 8月 25日 日曜日 13:30:53 JST ←日本時間になった!

【参考】
AWSにApache+PHP+MySQLとphpMyAdmin,vsftpdを導入する手順
Amazon EC2 (Amazon Linux) での ApacheとPHP インストールと設定
AWSでAmazon Linuxを起動したらやること(タイムゾーンの設定)


ARDSでインスタンス(mySQL)を立ち上げる
ドットインストール(#10 データベースを立ち上げてみよう)のとおり

EC2からRDSにMySQLでアクセスするために、Security GroupにMySQL(3306)を追加します。
スクリーンショット 2013-08-26 7.30.48.png

BEC2からRDSに接続する
ドットインストール(#11 スペック変更とEC2からの接続)のとおり
サイトに掲載されているmySQLの接続コマンドでは接続できませんでした!

●成功したコマンド
$ mysql -h [Endpoint] -P 3306 -u [RDSインスタンスのユーザー名] -p
※Endpoint末尾の「:3306」を消して「-P 3306」にしました

・MySQLにログインしたら、自分で作ったDBが存在するかチェック
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| innodb |
| mysql |
| performance_schema |
| test01 |    ← 自分で作ったDB
+--------------------+


これでEC2とRDSのインスタンス立ち上げ、最低限のチェックができました。

まとめると短いですが、ここまでで2日かかってます orz
はじめてのことは、ハードル高いぜ!

次は、EC2とRDSを使って色々とやっていきたいと思います。
posted by be-style at 13:58| Comment(0) | Web

2013年07月13日

[Web]DFPスタンダードの登録申請でAdsenseのIDが無効と言われたときの対応

広告配信を管理するツールとして「DFPスタンダード」というものがあります。
まずはこのフローチャートを見て、自分に必要かどうかを考えてみました。

DFPスタンダードとは:
http://www.google.co.jp/intl/ja/dfp/info/sb/how_it_works.html

フローチャート:
http://ads-meeting.com/level3/340.html

これは試してみないと!
ということで、早速登録申請へ。


登録申請画面:
http://www.google.co.jp/intl/ja/dfp/info/sb/

すると、既にGoogle Adsenseのアカウントを持っているにも関わらず、
「AdSense サイト運営者 ID」の入力のところで

AdSense の運営者 ID が無効です。

と怒られてしまいます。

そんなときは、上記登録画面の「お申し込み」ではなくて「ログイン」から
登録申請することができます。

20130713dfp001.png

こちらの方が入力項目がなく、スムーズに登録申請できました。

20130713dfp002.png

言語を決めて、

20130713dfp003.png

タイムゾーンと通過を決めるだけ!

20130713dfp004.png

申請自体はほんの数分だけど、この解決方法を探すのに時間がかかりました……。

「DFPのよくある質問」にもありますが、
月間の広告表示回数が9,000万未満なら無料です。

個人開発者には充分ではないでしょうか。

ということで、試してみますー。
posted by be-style at 05:11| Comment(0) | Web

2013年02月28日

[Web] さくらVPSでのメンテナンスについて

昨年4月から、node.jsを使って小規模なサーバーを運用していました。

[Web] node.jsを使ってみる(さくらVPS編)
http://blog.be-style.jpn.com/article/54860074.html?1361976544

VPSなので、自分でメンテナンスをしなくてはいけません。
ソフトウェアを最新のものにするのはひと苦労でした。

その作業についての備忘メモ。

やることはこの3点。
@node.js を最新版にする
AMySQL を最新版にする
BさくらVPSで使われているもろもろのソフトウェアをまとめてアップデートする


-----------------------------------------------------
@node.js を最新版にする
・現バージョンをチェック
$ node --version
・最新版をチェック
http://nodejs.org/#build と比較する。 ※2013.2.27.現在の最新バージョンは、0.8.21

・最新版をダウンロード
$ wget http://nodejs.org/dist/v0.8.21/node-v0.8.21.tar.gz

・解凍
$ tar zxvf node-v0.8.21.tar.gz
 → node-v0.8.21 というディレクトリができるのでそこに移動

・ビルドとインストール
$ ./configure
$ make
$ su   ※root権限にスイッチ
# make install

・最新版になっているかチェック
$ node --version


-----------------------------------------------------
AMySQL を最新版にする
・現バージョンをチェック
$ mysqladmin -u root -p version
$ rpm -qa | grep -i ^MySQL-

・最新版をチェック
http://www.mysql.com/downloads/mysql/ と比較する。 ※2013.2.27.現在の最新バージョンは、5.6.10

・バージョンアップ ※ビルド番号違い
$ su
# yum -y install mysql-server
※この方法は5.1.xx(ビルド番号違い) 版のみ対応 5.x(マイナー番号違い) をバージョンアップするのは下記方法
バージョン番号について:
http://mainori-se.sakura.ne.jp/sst/wiki.cgi?page=%A5%D0%A1%BC%A5%B8%A5%E7%A5%F3%C8%D6%B9%E6%A4%CE%C9%D5%CD%BF%A5%EB%A1%BC%A5%EB

・最新版をダウンロード
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-5.6.10-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.10-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.10-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.10-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/

準備ができたので、いよいよサーバーを停止します。。。

・MySQLサーバーを停止
# /etc/init.d/mysqld stop

・古いほうを削除 (rpm -qa | grep -i ^MySQL- でリストアップできる)
# yum remove mysql-server-5.1.67-1.el6_3.x86_64
# yum remove mysql-5.1.67-1.el6_3.x86_64
# yum remove mysql-libs-5.1.67-1.el6_3.x86_64

・新しいほうをインストール
# rpm -ivh MySQL-{devel,shared,client,server}-*.rpm

・アップグレード
# /etc/init.d/mysql start

「/etc/init.d/mysql start」を実行したところ
The server quit without updating PID file (/var/lib/mysql/sakuravps.be-style.jpn.com.pid).
というエラーが出ました。
調べたところ、3つの対応が必要でした。

★★★ エラー対応 ★★★
# /etc/init.d/mysql start
The server quit without updating PID file (/var/lib/mysql/sakuravps.be-style.jpn.com.pid).

Q1./etc/my.conf が消えてる!
A1.my.cnf.rpmsave(インストール時に自動生成される) からコピー

Q2.[ERROR] InnoDB: auto-extending data file ./ibdata1 is of a different size 640 pages (rounded do
wn to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!
↑エラーログ( /var/log/mysqld.log )より
A2./var/lib/mysql の「ib」ではじまるファイルを削除
【参考】http://www.ilovex.co.jp/blog/system/projectandsystemdevelopment/mycnfinnodbmysql.html

Q3.[ERROR] /usr/sbin/mysqld: unknown variable 'default-character-set=utf8'
   [ERROR] Aborting
↑エラーログ( /var/log/mysqld.log )より
A3./etc/my.conf の以下をコメントアウト
# character-set
# default-character-set=utf8 ←これ
★★★ エラー対応(ここまで) ★★★

・改めてアップグレード
# /etc/init.d/mysql start
# mysql_upgrade -u root -p

・再度バージョンチェック
mysqladmin -u root -p version
最新版になっていれば成功!

【参考】
【MySQL】5.1から5.5へのアップグレード(rpmで):
http://www.softel.co.jp/blogs/tech/archives/2288


-----------------------------------------------------
BさくらVPSで使われているもろもろのソフトウェアをまとめてアップデートする
yumを使えば一気に解決!これは知りませんでした。

・現状をチェック ※アップデート対象が一覧表示されます
$ yum check-update

・一斉アップデート
$ sudo yum update

【参考】
さくらのVPSの運営時にチェックしておきたいセキュリティ対策:
http://colo-ri.jp/develop/2012/01/sakura-vps-security-check.html


-----------------------------------------------------

サーバーを止めずにアップグレードしたかったのですが、そこまで調べきれなかったのでそれは次回の課題。
posted by be-style at 00:30| Comment(0) | Web

2012年09月20日

[Web] Facebookページのウィジェット(Like Box)を設置してみた

Facebookページを作ってみました。

be-styleのFacebookページ:
http://www.facebook.com/bestyle.jpn

ここではリリース情報の告知や、be-styleとして収集している情報の共有を目的としています。
アプリづくりをするとき、運用やマネタイズを考えるときににどんな情報を集めているのか、
ここで共有できたらと思います。

あとは、Facebookページへの導線をどうするか考えたときに、
Twitter同様、ブログの右メニューにウィジェットを表示してみようと思い設置してみました。
使ったのは、「Libe Box」。

Like Box:
http://developers.facebook.com/docs/reference/plugins/like-box/

設定は簡単で、上記ページで遷移先ページのURLや幅や高さを設定するだけでした↓

20120920facebookwedgit.png

サポートされている横幅の最小値が292pxという点に注意です。
ウチのブログの右メニューの横幅はそれより狭いので、表示がバグってもサポート外です orz

まずはこの形で運用してみよう。
posted by be-style at 01:19| Comment(0) | Web