ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

2015年11月28日土曜日

ideabank.phpでやった処理についてまとめてみる


http://miraiplatform.com/service/ideabank.phpではPHP×MySQLの組み合わせでシステムを作っています。

実際にはどんな様なコードを書いたのか、サラッとまとめてみます。


database.phpはMySQLの接続設定が書いてあるファイルになります。
MySQLに接続して、最新のレコード1件を取ってきます。
ちなみに非推奨メソッドとか使っていて、将来的にPHP7では動かないコードなので注意が必要です。
<?php

include_once 'database.php';

$api_url = 'http://butaman.ymk-spark.or.jp/soft/testtech/randomsearch/WebApi.aspx?results=2';

$link = mysql_connect("$host:$port", $user, $password);
mysql_set_charset('utf8', $link);
$db_selected = mysql_select_db($db, $link);

$now_date = date('Y-m-d H:i:00');
$event_date = date('Y-m-d H:i:00');
$keyword1 = "";
$keyword2 = "";
$query = "SELECT keyword1, keyword2, event_date FROM keyword ORDER BY id DESC LIMIT 1";
$result = mysql_query($query);

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
 $keyword1 = $line["keyword1"];
 $keyword2 = $line["keyword2"];
 $event_date = $line["event_date"];
}

mysql_free_result($result);
?>
次にhtml的な出力をします。出力内でキーワードの変数を出力したいので以下の様な感じでやっています。
<?php echo "#" . $keyword1 . " × #" . $keyword2; ?>
最後に最終レコード取得のタイミングから1分経過していたら、APIを叩いてMySQLにレコードをセットします。
レンダリングが遅くなると嫌なので、htmlを出力したあとにこの処理を持ってきています。 
PHPの場合、HttpClientとか考えずにsimplexml_load_fileでURLからXMLのレスポンスを取得できます。
なんとなく連想配列にしたかったので、json_encode、json_decodeとかしています。
<?php

if (strtotime($now_date) > strtotime($event_date)) {
 $response = simplexml_load_file($api_url);
 $json = json_encode($response);
 $array = json_decode($json, TRUE);
 $sql = sprintf("INSERT INTO keyword (event_date, keyword1, keyword2, create_date) VALUES ('%s', '%s', '%s', NOW())", mysql_real_escape_string($now_date), mysql_real_escape_string($array["Result"][0]), mysql_real_escape_string($array["Result"][1]));
 $result = mysql_query($sql);
}

mysql_close($link);
?>

新しいサイトを立ち上げてみた。2015年版。

http://miraiplatform.com/service/ideabank.php

http://miraiplatform.com/service/ideabank.php

孫正義さんが学生だった頃、いろいろな単語カードを用意してそれを無作為に抽出して、単語の組み合わせから、ビジネスのアイディアを考え「アイデアバンク」というノートに書きとめていたそうです。

以下のサイトで詳しく説明がされています。
http://kigyouidea.net/colums/ideacatch/

ちなみに、キーワードの組み合わせからアイディアを出すのは1日5分、と決めていたそうです。

そこでこれを実現すべく、ランダムなキーワードを表示してくれるサービスを作りました。

キーワードの抽出は ランダム検索キーワードWeb API を使用させていただいています。

Yahoo!の人気検索ワードやその他のRSS配信から、「茶筌」というプログラムを使用してキーワードを取り出して記録します。
http://butaman.ymk-spark.or.jp/soft/testtech/randomsearch/Help.aspx?page=0より引用

ということだそうなので、実際に抽出されているキーワードは最近ニュースで聞くような単語が多いです。

表示された2つのキーワードからサービスのアイディアをTwitterに投稿することができるようになっています。

APIを使ってキーワード抽出の場だけを用意して、自分以外の人にもアイディアを考えてもらおう、というエコシステムになっています。
ぜひご利用ください。

なお、キーワードの更新間隔はAPIを大量にリクエストしてしまわないように1分ごとになっています。

2014年1月10日金曜日

さくらのVPSでPlay Frameworkを動かす:MySQL5.5の文字コードをよろしくする

UTF-8 エンコードされた絵文字を MySQL / JDBC で取り扱うには?


にあるように、ちょっとTwitterと連携する関係でutf8mb4を使いたくなりました。
以下の対応を行って様子を見てみます。

設定ファイルの変更


/etc/my.conf の以下を変更してMySQLを再起動します。

[mysqld]
#character-set-server = utf8
character-set-server = utf8mb4

既存テーブルの変更


とりあえず対応が必要なデータベースは1つでテーブルの数も5個位だったので、全部のテーブルに以下のSQLを実行

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;

Play Frameworkの接続設定の変更


application.confを以下のように書き換え

db.default.url="jdbc:mysql://localhost:3306/dbname?useUnicode=yes&characterEncoding=utf8&connectionCollation=utf8mb4_general_ci"

2014年1月9日木曜日

さくらのVPSでPlay Frameworkを動かす:MySQLを5.1から5.5にアップデートする

utf8mb4_general_ciが使いたいので、
CentOSのMySQLを5.1から5.5にアップデートします。

方法はもちろんお手軽なyum updateで行います。

事前準備


バックアップをとっておきましょう
mysqldump  -u root -p --all-database > all.sql
設定ファイルも念のためバックアップをとっておきます。
cp /etc/my.cnf /etc/my.cnf.backup

remiリポジトリの追加

epelの追加
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
remiの追加
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

アップデート

service mysqld stop
yum --enablerepo=remi update mysql mysql-server

設定ファイルの変更

/etc/my.conf
の以下の場所を書き換えます。

[mysqld]
#default-character-set = utf8
character-set-server = utf8

#key_buffer = 128M
key_buffer_size = 128M

#log-slow-queries = /var/log/mysql-slow.log
slow-query-log = ON
slow-query-log-file = /var/log/mysql-slow.log

MySQLを起動します

service mysqld start
アップデートバッチを実行します
mysql_upgrade -u root -p