2012/01/25

【開発環境構築】Android SDKをインストール Part.1【Android】

ということで、Androidアプリ開発のためにAndroid SDKをインストールします。

まずは、こちらのサイトにアクセスします。

インストーラ版とZip版がありますが今回はインストーラ版でやりたいと思います。
特に理由はないです。

まず、赤で囲まれている 「installer_r16-windows.exe」を押下します。
ダウンロードが始まります。

ダウンロードが完了したら、ファイルを実行します。 下記の画面が表示されますので 「Next」 を押下します。
次も 「Next」 を押下します。
インストールする場所の選択です。 今回はデフォルトのままで行きます。 選択が完了したら 「Next」 を押下し、次に進みます。
スタートメニューに登録するかどうかの選択です。 選択が完了したら 「Install」 を押下し、インストールを開始します。
インストール中画面
インストールが完了したら、 「Next」 を押下します。
完了画面です。 「Finish」 を押下し次にAndroid SDKにて使用するAndroid OSなどのパッケージをインストールします。
続き 終わり 関連記事: 【開発環境構築】JDKのインストール 【開発環境構築】Android SDKのインストール Part.2【Android】 【開発環境構築】Eclipse 3.7 にADTプラグインをインストールする【Android】

2012/01/24

【開発環境構築】JDKのインストール

今回のインストールした環境は下記になります。
OS:Windows 7 Pro 64bit
今回インストールするJDKはEclipseでAndroidアプリ開発用の環境構築に使用します。 まず、ORACLEのこちらのページにアクセスします。 下記の赤で囲まれたDownloadボタンを押下します。
次の画面に遷移しますので、赤で囲まれている「Accept License Agreement」の チェックボックスにチェックを入れます。(ライセンスに同意する) チェックボックスにチェックを入れたら、下の方にある赤で囲まれた「jdk-7u2-windows-x64.exe」 を押下します。 ファイルのダウンロードが始まります。
ファイルのダウンロードが終わったらダウンロードしたファイルを実行します。 下記の画像のような画面が表示されますので、 「次へ」 を押下します。
次にインストールするものを選択します。 特に変更はないと思いますので、そのまま 「次へ」 を押下します。
インストールが始まりますので少し待ちます。
しばらくすると下記のウィンドウが開きます。 インストール先の指定ですが、特に変更がなければこのまま 「次へ」 を押下します。
インストールが始まりますので少し待ちます。
インストールが完了すれば下記の画面が表示されます。
「継続」というボタンがありますが、これを押下すると「JavaFX」のインストールが 始まりました。 今回は必要無いので「キャンセル」ボタンを押下し終了しました。 終わり。

2012/01/22

【プログラミング】PHPプログラマについて思うこと【PHP】

PHPプログラマについて思うことがあったので書いてみようと思います。

まず、PHPは型宣言がなくすごく曖昧です。
厳密にチェックしようと思えばできるのですがそれでも言語として貧弱な所が
あります。

例えば下記のような関数があったとします。
function example($bool)
{
    if ($bool)
    {
        echo "A";
    }
    else
    {
        echo "B";
    }
}
引数に0とかnullとか以外をセットするとこの場合 「A」 が表示されます。 ですが、関数がこういう書き方をされていると
function example($bool)
{
    if ($bool === true)
    {
        echo "A";
    }
    else
    {
        echo "B";
    }
}
引数の値が 「true」 でなければ 「A」 は表示されません。 この関数の例えを踏まえてこんな会話を聞いたことがあります。 A「ここの関数はtrueを指定しないとダメじゃないの?」 B「1入れても動くんで大丈夫ですよ」 これを聞いていて僕は「何が?」と思ってしまいました。 もしPHPに使用変更があって型が厳密になったらどうするの?とか その関数を作成した担当が値を型までチェックするように変更したら?とか思います。 こういう意識を持っていない人がPHPプログラマには僕を含めて多いと思います。 型が曖昧でとっつきやすいところがPHPの特徴でありいろいろ楽できるところなんですが、 個人的にはあまり好きではないです。 自分でもPHPのそういうところに助けられたりしたことがあるのですが、 できるだけ厳密に型については扱うように心がけようと思いました。 以上なんとなく思ったことでした。 終わり

【PHP】Twitter APIを使ってつぶやきを投稿するサンプル【Twitter】

ということでPHPでTwitterAPIをつかってつぶやきを投稿するサンプルを作りました。

※Twitter APIを使うにはOAuth認証を使いますのでこちらより必要なモノを取得してください。

必要なもの
・Consumer key ・Consumer secret 前回の記事を参考にしてください。 今回はサイトURLを   http://example.com/index.php コールバックURLを   http://example.com/callback.php という感じに設定しました。 通常コールバックURLにてアクセストークンの保存処理などを行うのですが、今回は サンプルということでそのままつぶやきを投稿しています。 下記ソースです。 index.php
<?php
session_start();
require_once 'common.php';

$consumer_key    = '取得したコンシューマキー';
$consumer_secret = '取得したコンシューマシークレット';
$request_url     = 'https://api.twitter.com/oauth/request_token';
$auth_url        = 'https://api.twitter.com/oauth/authorize';

// シグネチャ作成用パラメータ
$signature_params = array(
    'oauth_consumer_key'     => $consumer_key,
    'oauth_nonce'            => md5(microtime() . mt_rand()),
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_timestamp'        => time(),
    'oauth_version'          => '1.0',
);
// シグネチャの作成
$signature = getOAuthSignature($request_url, $signature_params, $consumer_secret);
$signature_params['oauth_signature'] = $signature;

// トークン取得用リクエスト文字列作成
$query = getRequestQuery($signature_params);

// リクエストトークン取得
$request_token = getRequestToken($request_url, $query);

// Twitterのアプリケーション認証画面へリダイレクト
header('Location: ' . $auth_url . '?oauth_token=' . $request_token);
exit;

/**
 * リクエストトークンの取得
 * @param  string $request_url   リクエストURL
 * @param  string $query         リクエストパラメータのクエリストリング
 * @return string $request_token リクエストトークン
 */
function getRequestToken($request_url, $query)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $request_url . '?' . $query);

    $res = curl_exec($ch);
    curl_close($ch);

    parse_str($res, $result);
    $request_token = $result['oauth_token'];

    return $request_token;
}
callback.php
<?php
session_start();
require_once 'common.php';

$consumer_key    = '取得したコンシューマキー';
$consumer_secret = '取得したコンシューマシークレット';
$access_url      = 'https://api.twitter.com/oauth/access_token';
$update_api      = 'https://api.twitter.com/1/statuses/update.json';

// アクセストークン取得用パラメータ
$params = array(
    'oauth_consumer_key'     => $consumer_key,
    'oauth_nonce'            => md5(microtime() . mt_rand()),
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_timestamp'        => time(),
    'oauth_token'            => $_GET['oauth_token'],
    'oauth_verifier'         => $_GET['oauth_verifier'],
    'oauth_version'          => '1.0',
);

$signature = getOAuthSignature($access_url, $params, $consumer_secret, 'POST', $_GET['oauth_token_secret']);
$params['oauth_signature'] = $signature;

// トークン取得用リクエスト文字列作成
$query = getRequestQuery($params);

// アクセストークンとシークレットの取得
$access_token = getAccessToken($access_url, $query);

// ツイート投稿パラメータ
unset($params['oauth_signature'], $params['oauth_verifier']);
$params['status'] = 'test投稿';
$params['oauth_token'] = $access_token['oauth_token'];

uksort($params, 'strnatcmp');
$signature = getOAuthSignature($update_api, $params, $consumer_secret, 'POST', $access_token['oauth_token_secret']);
$params['oauth_signature'] = $signature;

// パラメータ名でソート
uksort($params, 'strnatcmp');
$request_param = getRequestQuery($params);

echo '<pre>';
print_r(update($update_api, $request_param));
echo '</pre>';

/**
 * つぶやきの投稿
 * @param  string $update_api    update apiのURL
 * @param  string $request_param リクエストパラメータ
 * @return string $res           TwitterAPIよりのレスポンス
 */
function update($update_api, $request_param)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $update_api);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request_param);
    curl_setopt($ch, CURLOPT_HEADER, false);

    $res = curl_exec($ch);
    curl_exec($ch);

    return $res;
}

/**
 * アクセストークンの取得
 * @param  string      $access_url アクセストークン取得用URL
 * @param  assoc_array $query      アクセストークン取得用クエリ
 * @return assoc_array $result     アクセストークン と アクセストークンシークレット
 */
function getAccessToken($access_url, $query)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $access_url . '?' . $query);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $res = curl_exec($ch);
    parse_str($res, $result);
    $access_token = $result['oauth_token'];

    return $result;
}
common.php
<?php
/**
 * シグネチャ文字列の作成
 * @param  string      $request_url     リクエストURL
 * @param  assoc_array $params          シグネチャ作成用パラメータ
 * @param  string      $consumer_secret コンシューマシークレット
 * @param  string      $method          リクエストメソッド
 * @param  string      $oauth_token     OAuth token
 * @return string      $signature       シグネチャ
 */
function getOAuthSignature($request_url, $params, $consumer_secret, $method = 'GET', $oauth_token_secret = '')
{
    $signature = '';

    $params = array_map('urlEncodeRfc', $params);
    uksort($params, 'strnatcmp');

    $param = array();
    foreach ($params as $key => $val)
    {
        $param[] = $key . '=' . $val;
    }
    $query = implode('&', $param);

    $base_array = array(
        $method,
        $request_url,
        $query,
    );
    $base_array = array_map('urlEncodeRfc', $base_array);
    $base_string = implode('&', $base_array);

    $key = array(
        $consumer_secret,
        $oauth_token_secret,
    );
    $key = array_map('urlEncodeRfc', $key);
    $key = implode('&', $key);

    // ベース文字列をシグネチャに
    $signature = base64_encode(hash_hmac('sha1', $base_string, $key, true));

    return $signature;
}

/**
 * URLエンコードをしたリクエスト用クエリストリングを作成
 * @param  assoc_array $params 作成する連想配列
 * @return string      $query  クエリストリング
 */
function getRequestQuery($params)
{
    $params = array_map('urlEncodeRfc', $params);
    $query_param = array();
    foreach ($params as $key => $val)
    {
        $query_param[] = $key . '=' . $val;
    }
    $query = implode('&', $query_param);

    return $query;
}

/**
 * URLエンコード
 * @param  string $str     エンコードする文字列
 * @return string $enc_str エンコード済み文字列
 */
function urlEncodeRfc($str)
{
    $enc_str = str_replace('%7E', '~', rawurlencode($str));

    return $enc_str;
}
流れは、index.phpでまず、リクエストトークンを取得します。 その後リクエストトークンをクエリパラメータとしてTwitterの アプリケーション認証画面にリダイレクトします。 ユーザが認証を押下した場合 コールバックURL「callback.php」 に リダイレクトされます。 リダイレクトされてきた際にGETパラメータにて 「oauth_token」 「oauth_token_secret」 の値が付加されていますので、その値を使いアクセストークンを取得します。 つぶやきを投稿する際はつぶやき投稿用パラメータを含めたシグネチャを作成し、 取得したアクセストークンを使ってリクエストを送信します。 おおまかな流れは以上になります。 終わり 関連記事: 【Twitter】TwitterのAPIを使う準備

2012/01/21

【Twitter】TwitterのAPIを使う準備

ということでTwitterAPIを使う準備をしました。

まず、こちらへアクセスすると下記の画面へ遷移します。
赤い四角で囲まれている 「Create an app」 を押下します。

すると下記画面が表示されログイン要求をされますので、いつものログインIDとPWを入力し ログインします。
ログイン後に下記の画面が表示されますので、そこに必要な項目を入力します。 下記が入力項目とその画面になります。 ・Name アプリケーション名 ・Description アプリケーションの説明文 ・WebSite アプリケーションのTOP ・Callback URL 認証時のコールバック用URL 入力が完了したら一番下の 「Create your Twitter application」 を押下します。
するとこちらの画面に遷移しますので、 Consumer key Consumer secret をアプリケーションで使用しますので保存します。 以上でTwitterAPIを使ったアプリケーションの作成準備は完了です。 次はつぶやきの投稿サンプルを作成したいと思います。 終わり 【追記】 Twitter APIでつぶやきを投稿する際は書き込み権限が必要になりますので下記の画面にて 「Read & Write」にチェックを入れる必要があります。
関連記事: 【PHP】Twitter APIを使ってつぶやきを投稿するサンプル【Twitter】