配列の構造化マークアップ

例えば、以下のように株価の配列を書き出す。

<?php

$array = array(
  "code" => "4779",
  "name" => "ラクオリア創薬",
  "price" => "1728"
);
?>
<script type="application/ld+json">
{
	"code" : "<?php echo $array&#91;code&#93;; ?>",
	"name" : "<?php echo $array&#91;name&#93;; ?>",
	"price" : "<?php echo $array&#91;price&#93;; ?>",
}
</script>

jsonにencodeすれば、吐き出す必要はなし。

<?php
$array = array(
  "code" => "4779",
  "name" => "ラクオリア創薬",
  "price" => "1728"
);
$json = json_encode($array, JSON_UNESCAPED_UNICODE);
?>

<script type="application/ld+json">
<?php print $json; ?>
</script>

/httpd/conf.d/

ヴァーチャルホストの設定

<VirtualHost *:80>
DocumentRoot /var/www/html/hoge
DirectoryIndex index.html index.php
ServerName www.hoge.com
ServerAlias hoge.com
CustomLog logs/hoge.com-access.log common
ErrorLog  logs/hoge.com-error.log
AddDefaultCharset UTF-8
<Directory "/var/www/html/hoge/">
AllowOverride All
</Directory>
</VirtualHost>

vpsインストール後の鍵認証の設定

まず、yum update

Loaded plugins: fastestmirror, security
Setting up Update Process
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.riken.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
No Packages marked for Update

1.公開鍵の転送先ディレクトリの作成

# mkdir .ssh
# chmod 700 .ssh

ssh-keygenで、id_rsa id_rsa.pubを作成します。

MySQL 中国語も”varchar”でOK?

mysql> create table **.**(
    ->     id int,
    ->     word1 varchar(255),
    ->     word2 varchar(255),
    ->     word3 varchar(255),
    ->     word4 varchar(255),
    ->     word5 varchar(255),
    ->     word6 varchar(255),
    ->     word7 varchar(255),
    ->     word8 varchar(255),
    ->     word9 varchar(255),
    ->     word10 varchar(255)
    ->     );
Query OK, 0 rows affected (0.22 sec)

mysql> insert into **.** values
    -> (1, '关键词01','关键词02','关键词03','关键词04','关键词05','关键词06','关键词07','关键词08','关键词09','关键词10');
Query OK, 1 row affected (0.05 sec)

mysql> select * from **;
+------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
| id   | word1       | word2       | word3       | word4       | word5       | word6       | word7       | word8       | word9       | word10      |
+------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
|    1 | 关键词01    | 关键词02    | 关键词03    | 关键词04    | 关键词05    | 关键词06    | 关键词07    | 关键词08    | 关键词09    | 关键词10    |
+------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
1 row in set (0.00 sec)

大丈夫そうです。CHARは固定長、VARCHARは可変長ですね。

weibo 微博 api 登録までの流れ

まず、Weiboに登録します。
「weibo english」で検索すると、英語のregistrationページがあるので、スマホの番号を入れ、送られてきたパスコードを入力して完了です。

次に、ログインした状態で、http://open.weibo.com/ に行き、右上のプルダウンから、「编辑开发者信息」を選択します。「开发者」kaifa zhe が開発者という意味ですね。

邮编 youbian: 郵便番号
邮箱 youxiang: e-mail
联系电话 lianxi dianhua: 連絡先電話番号 81+ :
聊天工具: チャットツール

ちょっと待て、チャットがない。「MSN,QQ,Gtalk至少填写一项」
「聊天工具格式错误,请修改」qing xiugai 修正と出ている。とのことで、QQに登録。

网站:http://192.168.33.10:8000
紧急联系人姓名:

发送验证邮件 Fasong yanzheng youjian:確認メールが飛ぶ

配列の先頭を末尾に変える

PDOで、コード2929の銘柄が、株価416円、前日比+16%となり、それをデータベースに入れたいとする。
array(2929, 416, 18)を、以下のように、codeを末尾に変えるには?

$sql = "UPDATE stoph SET price = ?, ratio = ? WHERE code = ?";

array_sliceで切り取って、以下のように並び順を変える。

$today = array(2929, 416, 18);
$change = array_slice($today, 1);
$change[] = $today[0];

array(3) { [0]=> int(416) [1]=> int(18) [2]=> int(2929) }

$today = array(2929, 416, 18);
$change = array_slice($today, 1);
$change[] = $today[0];


$sql = "UPDATE stoph SET price = ?, ratio = ? WHERE code = ?";
$stmt = $dbh->prepare($sql);

$stmt->execute($change);

PDOで配列のデータをアップデート

以下のように、updateする内容を配列でもって、それをexecuteすれば、そのまま反映されます。

<?php

$dsn = "mysql:dbname=stock;host=localhost";
$user = "root";
$password = "";
try {
	$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e){
	print('connection failed:'.$e->getMessage());
}

$change = array(420, 21, 2929);
$sql = "UPDATE stoph SET price = ?, ratio = ? WHERE code = ?";
$stmt = $dbh->prepare($sql);

$stmt->execute($change);
// $sql = "UPDATE stoph SET price = :price WHERE code = :code";
// $stmt->execute(array(':price'=>425, ':code'=>2929));
?>

PDOでデータをupdate

まずは”?”を使って更新します。

<?php

$dsn = "mysql:dbname=stock;host=localhost";
$user = "root";
$password = "";
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'");
try {
	$dbh = new PDO($dsn, $user, $password, $options);
} catch (PDOException $e){
	print('connection failed:'.$e->getMessage());
}

$sql = "select stoph SET 'price' = ? WHERE id = ?";
$stmt = $dbh->prepare($sql);

$stmt->execute(array(430, 2929));
?>

PDOとは

PHP Data Objectの略で、php5.1.0以降のデータベース接続クラスの事。GDO(golf digest online)ではありません。

では、まずmysqlにログイン(mysql -u root -p)して、データベースをつくりましょう。サンプルで、ストップ高のテーブルをつくります。

create database stock;

次に、ストップ高のテーブルをつくります。

create table stock.stoph(
	code int,
	name varchar(255),
	price int,
        ratio int
);

そして、テーブルにストップ高の銘柄を入れていきます。

insert into stock.stoph values
(1743, 'コーアツ工業', 3175, 18.82),
(2929, 'ファーマフーズ', 440, 22.22),
(3469, 'デュアルタップ', 1144, 15.09),
(3825, 'リミックスポイント', 791, 14.47);

では、コーディングしていきます。

<?php

$dsn = "mysql:dbname=stock;host=localhost";
$user = "root";
$password = "";

try {
	$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e){
	print('connection failed:'.$e->getMessage());
}

$sql = "select * from stoph";
$stmt = $dbh->query($sql);

while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
	print($result["code"]);
	print($result["name"]);
	print($result["price"]);
	print($result["rate"]."<br>");
}


?>

new PDO とは、PDOのクラスをつくっています。
$dbh->query($sql) は query(※実行)のメソッドに$sqlを代入しています。
$stmt->fetch(PDO::FETCH_ASSOC)は、厳密には、$dbh->query->fetch(PDO::FETCH_ASSOC)ですね。

cronが動かないとき((getpwnam() failed)

cronが動かないのでコマンドラインで、cat /var/log/cron を打つと、

Feb 13 13:50:01 localhost crond[3093]: (/usr/bin/php) ERROR (getpwnam() failed)

getpwnamはパスワードファイルの取得にエラーがあるようです。

以下のように書き換えました。

// 前
00,10,20,30,40,50 * * * * /usr/bin/php /home/vagrant/api/test.php
// 後
00,10,20,30,40,50 * * * * root /usr/bin/php /home/vagrant/api/test.php

上手く動くようになりました。

### コマンドプロンプトの本
まあ買うまでもないかな