カテゴリー
SugiBlog Webデザイナー・プログラマーのためのお役立ちTips

VBAでWEBサーバーにHTTPリクエスト

MSXML2.XMLHTTPオブジェクトを利用してWEB上のデータを取得したり、PHP等のプログラムへデータを送信することができます。

ACCESS等で入力したデータをすぐにWEBに反映させたいとき等に便利です。

まずは宣言

Dim xmlHttp  as Object 'HTTPリクエストオブジェクト
Dim url      As String 'リクエストを送るURL
Dim strParam As String 'リクエストパラメータ
Dim strRes   As String '結果を受け取る変数

HTTPリクエスト用オブジェクトのバインド

Set xmlHttp = CreateObject("MSXML2.XMLHTTP")

・GET送信
リクエストするURLを指定

url = "http://www.example.jp/index.html"
With xmlHttp
    .Open "GET", url, False
    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .Send
    strRes = .ResponseText
End With

続きを読む…»

54,739 views

PHPでJSON形式のデータを簡単に扱う

PHPにはJSON形式のデータを簡単に扱える関数が用意されています。
PHP5.2.0以降であればコアに含まれるので追加インストールの必要はありません。

例として会員システムで登録ユーザーの最終ログイン日とログイン回数を記録するというプログラムとします。

まずは以下のようなサンプル配列を作成します。

$VALUE["suzuki"]    = array("last_login_date" => "13-10-26", "count" => 1);
$VALUE["hashimoto"] = array("last_login_date" => "13-10-28", "count" => 5);

確認のため、出力してみます。

Array
(
    [suzuki] => Array
        (
            [last_login_date] => 13-10-26
            [count] => 1
        )

    [hashimoto] => Array
        (
            [last_login_date] => 13-10-28
            [count] => 5
        )

)

作成した配列を引数として渡し、JSONデータを作成します。

$json = json_encode($VALUE);

出力してみましょう。

{"suzuki":{"last_login_date":"13-10-26","count":1},"hashimoto":{"last_login_date":"13-10-28","count":5}}

たったこれだけでJSONデータが作成できます。

次はデータに変更を加えてみます。 続きを読む…»

8,995 views

ルート検索 最適経路

営業の仕事をしていると、複数の場所を効率よく回りたい、という要求が出てくるかと思います。
GoogleMap APIを利用すれば出発地点、到着地点、8ヶ所の経由地を指定し、効率よく回るルートを検索することができます。
所謂巡回セールスマン問題を踏まえた結果を返してくれます。
その際はリクエストプロパティの「optimizeWaypoints」にtrueを設定しておきます。

しかし、経由地8ヶ所以上の検索はできません。
費用が発生してよいならば、23ヶ所まで検索できるようです。
では、費用をかけずに8ヶ所以上検索したい場合はどうしたらよいでしょうか?

どうにか自前でできないかと色々調べました。
巡回セールスマン問題、組み合わせ最適化、パス表現法、ナップサック問題、欲張り法、遺伝的アルゴリズム等々。

巡回セールスマン問題、組み合わせ最適化を踏まえた最適ルートの検索で、何通りのルートを計測すればいいかと言いますと、以下の通り

n!/2n

nを10とすると(10×9×8×7×6×5×4×3×2×1)÷(2×10)で181,440通りとなります。

更にnが増加すると莫大な計算量になってしまうので、日常のプログラムとして使用するには
現実的ではありませんし、スーパーコンピューターでも100億年かかるという計算量になってしまいます。

…無理です。。。

何か打開策はないかと、物理の仕事(仕事率)も応用してみようと試みましたが、力(N)に当たるものが
ないので、比較する値としては単純な速さとなってしまうので最適な結果は得られず断念。

最終的に、遺伝的アルゴリズムを見ていると、ルートをランダムに作成するしかないのか、
という結論に至り、研究は終了しました。

というわけで、PHPとJavaScriptを使いプログラムを作成しました。

続きを読む…»

8,883 views

配列をランダムに並べ替える

PHPではshuffle関数を使って、配列の値をランダムに並べ替えることができます。

例として1から15の配列を作成し、配列の要素数だけ繰り返しランダムに並べ替えたものを表示しています。

<?php

$num_list = range(1, 15);

$n = count($num_list);

for($i = 0; $i < $n; $i++) {
    shuffle($num_list);
    echo @implode(", ", $num_list)."<br>";
}

?>

実行した結果がこちら
random_array

979 views

割り算した余りを求める [PHP]

除算(割り算)した剰余(じょうよ:余り)を求めるには以下のようにします。

$surplus = 1564 % 1000;
echo $surplus;

出力結果

564

他の言語でも、同様の演算子があるかと思います。
例えばVBなら「mod」です。

しかし、引数が整数型(Integer)ではない場合、意図しない結果が返ってくることがあります。

$surplus = (65.1 * 1000) % 1000;
echo $surplus;

続きを読む…»

10,178 views