EPELリポジトリとは

EPELリポジトリとは、Centos標準のリポジトリでは提供されていないパッケージをyumコマンドでインストールすることを可能にするリポジトリのこと。EPELはエンタープライズ向けリポジトリ。

EPELリポジトリをインストール
yum install epel-release

続いて、php7.1をインストール
yum install –enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt

yahooショッピングapi

久しぶりにValueCommerceにログインしました(笑)

<!DOCTYPE html>
<html lang='ja'>
<head>
<title>API</title>
<meta charset='utf-8'>
</head>
<body>
<?php

$yahoo_result = getYahooResult('ヴィトン');
foreach ($yahoo_result as $item) :
?>
<div style='margin-bottom: 20px; padding: 30px; border: 1px solid #000; overflow:hidden;'>
<div style='float: left;'><img src='<?php echo $item&#91;'img'&#93;; ?>'></div>
<div style='float: left; padding: 20px;'>
<div><?php echo $item&#91;'name'&#93;; ?></div>
<div><a href='<?php echo $item&#91;'url'&#93;; ?>' target="_blank"><?php echo $item&#91;'url'&#93;; ?></a></div>
<div><?php echo $item&#91;'price'&#93;; ?>円</div>
</div>
</div>
<?php
endforeach;
?>
</body>
</html>
<?php
function getYahooResult($keyword){

$baseurl = "http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch";

$params = array();
$params&#91;"appid"&#93; = "***";
$params&#91;"query"&#93; = urlencode_rfc3986($keyword);
$params&#91;"sort"&#93; = urlencode_rfc3986("+price");
$params&#91;"affiliate_type"&#93; = "vc";
$params&#91;"affiliate_id"&#93; = urlencode_rfc3986("***");

$canonical_string = "";
foreach ($params as $k => $v){
	$canonical_string .= "&" . $k . "=" . $v;
}
$canonical_string = substr($canonical_string, 1);

$url = $baseurl . "?" . $canonical_string;

// echo $url . "<br>";

$yahoo_xml = simplexml_load_string(@file_get_contents($url));

// print_r('<pre>');
// var_dump($yahoo_xml);
// print_r('</pre>');

$items = array();
foreach($yahoo_xml->Result->Hit as $item){

	$items[] = array(
		'name' => (string)$item->Name,
		'url' => (string)$item->Url,
		'img' => (string)$item->Image->Medium,
		'price' => (string)$item->Price,
		);
}
var_dump($items);
return $items;
}

function urlencode_rfc3986($str){
	return str_replace("%7E", "~", rawurlencode($str));
}
?>

foreach, endforeach

foreach文は、{}を:、endforeachに変更できる。
連想配列のforeach入れ子でも同じですね。

<?php

$investment = array(
		'us' => array('ADARA','BIRDEYE','ClearMotion'),
		'japan' => array('ombie', 'caster', 'Cloud Ace', 'GHELIA')
);

foreach($investment as $contry => $company) :
  foreach ($company as $value) :
  		echo $contry .' : '. $value. '<br>';

 endforeach;
 endforeach;
?>

us : ADARA
us : BIRDEYE
us : ClearMotion
japan : ombie
japan : caster
japan : Cloud Ace
japan : GHELIA

以下のように、endforeach;が1回だとエラーになります。

<?php

$investment = array(
		'us' => array('ADARA','BIRDEYE','ClearMotion'),
		'japan' => array('ombie', 'caster', 'Cloud Ace', 'GHELIA')
);

foreach($investment as $contry => $company) :
  foreach ($company as $value) :
  		echo $contry .' : '. $value. '<br>';

 endforeach;

echo 'endforeachを1回';

楽天市場apiでジャンル指定

色々できそうですね♪

<!DOCTYPE html>
<html lang='ja'>
<head>
<title>api</title>
<meta charset='utf-8'>
</head>
<body>
<?php
$rakuten_result = getRakutenResult('adidas', 1000);
foreach ($rakuten_result as $item):
?>
<div style='margin-bottom:20px; padding:30px; border:1px solid #000; overflow:hidden;'>
<div style='float: left;'><img src='<?php echo $item&#91;'img'&#93;; ?>'></div>
<div style='float: left; padding: 20px;'>
<div><?php echo $item&#91;'name'&#93;; ?></div>
<div><a href='<?php echo $item&#91;'url'&#93;; ?>' target_"blank"><?php echo $item&#91;'url'&#93;; ?></a></div>
<div><?php echo $item&#91;'price'&#93;; ?>円</div>
<div><?php echo $item&#91;'shop'&#93;; ?></div>
</div>
</div>
<?php
endforeach;
?>
</body>
</html>


<?php

function getRakutenResult($keyword, $min_price){


$baseurl = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706';

function urlencode_rfc3986($str){
	return str_replace('%7E','~', rawurlencode($str));
}

$params = array();
$params&#91;'applicationId'&#93; = '***';
$params&#91;'keyword'&#93; = urlencode_rfc3986($keyword);
$params&#91;'sort'&#93; = urlencode_rfc3986('+itemPrice');
$params&#91;'minPrice'&#93; = $min_price;
$params&#91;'genreId'&#93; = '509057';



$canonical_string='';
foreach($params as $k => $v){
	$canonical_string .= '&' .$k. '=' .$v;
}

$canonical_string = substr($canonical_string, 1);

$url = $baseurl . '?' . $canonical_string;


$rakuten_json=json_decode(@file_get_contents($url, true));

print_r('<pre>');
var_dump($rakuten_json);
print_r('</pre>');

$items = array();
foreach($rakuten_json->Items as $item) {
    $items[] = array(
                    'name' => (string)$item->Item->itemName,
                    'url' => (string)$item->Item->itemUrl,
                    'img' => isset($item->Item->mediumImageUrls[0]->imageUrl) ? (string)$item->Item->mediumImageUrls[0]->imageUrl : '',
                    'price' => (string)$item->Item->itemPrice,
                    'shop' => (string)$item->Item->shopName,
                    );
}

return $items;
}
?>

hash_hmac

HMAC方式を使用して、ハッシュ値を生成

string hash_hmac($algo, $data, $key)

$algo:アルゴリズムの名前 “md5″、”sha256″、”haval160,4” など…
$key;HMAC 方式でのメッセージダイジェストを生成するために使用する 共有の秘密鍵。

サンプル

<?php

$str = "パスワード";

echo hash_hmac('md5', $str, 'secret') . "<br>";
echo hash_hmac('sha256', $str, 'secret') . "<br>";
echo hash_hmac('haval160,4', $str, 'secret') . "<br>";
?>

base64_encode

base64でエンコードする。
メール本体のように、8ビットクリーンではないトランスポート層でもバイナリデータが生き残るように設計されている。

<?php

$str = "高リスク仮想通貨株にガートマン氏も賭け";
echo base64_encode($str);
?>

結果:
6auY44Oq44K544Kv5Luu5oOz6YCa6LKo5qCq44Gr44Ks44O844OI44Oe44Oz5rCP44KC6LOt44GR

RFC3986とrawurlencode

URIまたはURLで使用できる文字をRFC3986で定義している。
This document obsoletes [RFC2396], which merged “Uniform Resource Locators” [RFC1738] and “Relative Uniform Resource Locators” [RFC1808] in order to define a single, generic syntax for all URIs.
RFC3986が分散したURIの定義を全て統合することを狙っている。

予約文字は不可、!、♯などの非予約文字は自由に使用可。

例えば、チルダをurlencodeすると、%7Eに変換されるが、rawurlencodeなら、チルダとなる。

<?php

$str = "~";
echo urlencode($str). "<br>";
echo rawurlencode($str);

さくらのphp-mecabをインストールする際に嵌ってしまった

mecabはphp7.0とphp5.*では、クラスの書き方が異なります。
例:MeCab_Tagger
例:\MeCab\Tagger

その為、git-cloneもしくはwgetでファイルを取得して展開した後に、以下のようにコンパイルするかと思いますが、./configureで、phpのバージョンを指定する必要があります。

phpize
./configure
make
make install

configureでphp-configとmecab-configを指定しますが、さくらの場合、php-configをphpのバージョンごとにディレクトリを分けて管理されている為、利用しているバージョンのディレクトリを指定して、configureしなければなりません。

./configure --with-php-config=/usr/local/php/5.6/bin/php-config --with-mecab=/usr/local/bin/mecab-config

上記は5.6ですが、phpinfoで確認できます。

これを解決するのに、5時間ぐらい調べて何度も試していました。馬鹿ですね。

localstorageのkeyを調べ、一致したらvalueを表示

正規表現で、keyの先頭に”38″がついていた場合には、pタグでlocalstorageのvalueを表示しています。

window.onload = function(){

var list = document.getElementById(“list”)
for (var i =0; i < localStorage.length; i++){ var p = document.createElement("p"); list.appendChild(p); var str = localStorage.key(i); if ( str.match(/^38/)){ p.innerHTML = localStorage.getItem(str); } } } [/php]