file_get_contents で JSON データを取得する

【サンプルコード】
JSON形式のファイルを読み込み、呼び出し元ページへリダイレクトするプログラム。( ► JSONについて )

$requestUrl = "http://sample.com/sample/sample?access_token=xxxxx";
// ファイルのコンテンツを取得
$result = file_get_contents($requestUrl );
// デコード
$result = json_decode($result, true); // 第2引数を true にすると、連想配列を返す。
// 配列に格納
$arr = array('code' => $result["meta"]["code"],
'feed_data' => $result["data"]);
// エンコード
$encode = json_encode($arr);

if($DEBUG){
  // デバッグ時は、ブラウザに表示させる
  header(" Content-Type:text/javascript; charset=utf-8");
}else{
  //ブラウザに表示されないので、デバッグ時は何かと不便なため本番のみこっち。
  header(" Content-Type:application/json; charset=utf-8");
}
//上記について詳しくはこちら► http://goo.gl/rkHcD

echo $encode; //出力
exit;
file_get_contents …. ファイルの内容を全て文字列に読み込む ( PHP リファレンス )
json_decode …. JSON 文字列をデコードする ( PHP リファレンス )
json_encode …. JSON 文字列をエンコードする ( PHP リファレンス )
json_last_error …. 直近に発生したエラーを返す ( PHP リファレンス )

※ただし、上記プログラムを実行すると、取得した文字列に「/」を含む(URLなど)場合、json_encode でエスケープされてしまうため「\ /」となってしまう。

▼▼▼▼

 
PHP5.4以降から、json_encode で、引数に JSON_UNESCAPED_SLASHES を設定して、「/」をエンコードしないようにできるようになった。

Instagram API を使う

Client IDを取得する

1. Instagram Developer Documentation にアクセスして、 Register your application ボタンをクリックする。(要ログイン)

2. デベロッパー登録をする( URL・電話番号・APIを使って何を構築するか 、をそれぞれ記入)。

3. Manage Clients 画面 > Register a New Client ボタン > Register new OAuth Client 画面で、 アプリケーション名・(アプリケーションについての)説明・WebSite・OAuthのリダイレクトURL をそれぞれ記入。(全項目入力必須、後で編集可能)

4. 取得したClientIDを使って情報を取得(JSON形式)。

https://api.instagram.com/v1/media/popular?client_id=CLIENT-ID

※個人の投稿した写真を見る時や、コメントやLikeを管理する際には、 AOuth認証が必要となってくるが、ポピュラー写真を閲覧するだけの場合は特に認証は必要ない。

 
 

AOuth認証( Access Token を取得する)

1. Access Token を取得するために必要な code を取得する。

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

上記のURLに自分が登録した値を入力してブラウザからアクセスする。

 
2. 遷移した画面で認証すると、redirect_uri に設定したURLにcode 付きでリダイレクトされる。

http://REDIRECT-URI?code=xxxxxxxxxxxxxxxxx

※ユーザがアクセスを拒否した場合以下の結果を返すので、適宜エラー処理を行う
error: access_denied
error_reason: user_denied
error_description: The user denied your request

 
3. Access Token を要求する。

[ AccessToken の取得に必要なパラメータ ]
client_id … クライアントID
client_secret … クライアントシークレット
grant_type … 現在、”authorization_code”のみ指定することができる。
redirect_uri … 認証リクエストを送信した際にredirect_uriで指定した値。(注意: この値は、認証リクエストで指定した値と完全に一致していなければならない。)
code … 認証ステップで受け取ったcodeパラメータの値
※トークンの有効期限が含まれないことに注意する。返されたaccess_tokenは、明示的な有効期限はない。アプリケーションは、ユーザがアクセスを拒否したり、一定時間経過後にトークンの有効期限が切れた場合を適切に処理する必要がある。その場合には、レスポンスデータのmeta情報に “error_type=OAuthAccessTokenError” という値が入る。

今回、取得したAccessTokenはSessionに入れて管理した。

Microsoft Translator API service を使う

Google Translater APIが有料になってしまったので、無料のプランがある Microsoft の翻訳APIを使い、翻訳サービスを作成する

手順1)) Microsoft Translator APIの利用登録

1. Windows Azure Marketplaceにアクセス(要WindowsLiveID)

2. Microsoft Translatorの登録ページへ。1txは1000文字。
 ・¥12,559/1ヶ月(16000 tx/1ヶ月)
 ・¥6,280/1ヶ月 (8000 tx/1ヶ月)
 ・¥4,710/1ヶ月(6000 tx/1ヶ月)
 ・¥3,140/1ヶ月(4000 tx/1ヶ月)
 ・¥0 (2000 tx/1ヶ月)

3. 利用規約に同意すると、 マイアカウント の マイデータ ページにMicrosoft Translatorが表示される。

手順2)) アクセストークン を取得する

1. Azure DataMarket にアプリケーションを登録
クライアントID、名前、顧客の秘密(デフォルトで入力済)、リダイレクトURIを入力。説明の項目は任意で入力。
クライアントID以外の項目は後で編集可能。

2, アクセストークンの生成、取得のサンプルソース(PHP。プログラムにあわせて要修正)
AjaxInterfaceを使う —->>サーバーサイドでアクセストークンを取得し、クライアントサイドで 翻訳メソッドを処理実行。

……………………………………………………………………………………………………………………………………………………………………………

Obtaining an Access Token (アクセストークン を取得する) ページ内の一部訳

Bing AppID は廃止され、これ以上サポートされません。 前述したように、MicrosoftTranslator APIを使用してアクセストークンを取得する必要があります。アクセストークンは、OAuthの規格に準拠し、より安全であり、より柔軟性があります。
アクセストークンの値は、MicrosoftTranslatorAPIへのsubsequent の呼び出しに使用することができます。 (以下略

・プリフィックス “Bearer”+ ” ” + アクセストークンプロパティーの値 をAuthorization ヘッダとし、Microsoft Translator APIを呼び出す。
・*appid* のフィールドは空のままにする。
・アクセストークンは 10分間有効 。 有効期限が切れた場合は、再度アクセストークンを生成する。
・それぞれのリクエストでの 最大文字数は1000文字 まで。スペースとマークアップ文字を含む。

……………………………………………………………………………………………………………………………………………………………………………

Microsoft Translator API と x-webkit-speech(音声入力/Chrome) 使用して作成したWeb翻訳サービス

数値等の選択に使うスライダーを作成する

JavaScript と CSS を使って、指定した範囲から値を選択するスライダーを作成する(FireFox動作可)

HTML5 から、input 要素にスライダーが追加された( HTML:<input type=”range” min=”0″ max=”10″ step=”1″/> 最小値 0、最大値 10、1目盛が 1 のスライダー )が、FireFox ではサポートされていない(2012/3現在)。
※ 以下は、スライダーをサポートしているブラウザ( Chrome, Safari 等)でのみ表示可能。

そこで、JavaScript と CSS を使ってクロスブラウザのスライダーを作ってみた(IE8+,Chrome,Opera,FireFoxで動作確認済)。
CSS を編集すれば、スライダーのスタイルを変更できる。


■ Sample( 最小値 0、最大値 10、1目盛が 1 のスライダー)

【HTML】

  

【CSS】

/*スライダー本体*/
.js-slider{
  position:relative;
  width:300px;
  top:15px;
  height:7px;
  background:#E8DBC7;
  border:1px inset #E8DBC7;
  border-radius: 10px;
}
/*スライダーのバー*/
.js-slider div{
  position:absolute;
  height:7px;
  font-size:0px;
  background:#D24034;
  border-radius: 10px;
}
/*スライダーのつまみ*/
.js-slider input{
  position:absolute;
  top:-4px;
  width:20px;
  height:20px;
  display:block;
  border:1px #cccccc;
  box-shadow: 2px 2px #cccccc;
  border-radius: 20px;     
  background:#ffffff;
  font-size:15px;
  color: #A6937C;
  text-align:center;
}
.js-slider input:hover{
  color: #D24034;
}

【JavaScript】

window.onload = function(){
	
  var output = document.getElementById('slider1o');//Valueを表示するテキストエリア	
  var slider = document.getElementById('slider1');//スライダー本体
  var bar1 = document.getElementById('bar1');//スライダーバー
  var input = document.getElementById('slider_btn');//スライダーのつまみ

  var dragging = false;
  var value = output.value;// 初期位置
  var width = input.clientWidth / 2; //ツマミの中心点までの距離

  var max_val = 10;//最大値
  var min_val = 0;//最小値
  var step = 1; //区切り間隔

  if( ((max_val-min_val) % step) > 0) {
     alert("区切り間隔の値が不正です。");
    return;
  }
  //1目盛毎のwidth。小数点以下1桁まで。
  var step_width = Math.round( (slider.clientWidth / ((max_val-min_val) / step)) * 10) / 10 ;

  var set_value = function (){

    // つまみのサイズ(input.clientWidth)だけ位置を調整
    input.style.left = (value - input.clientWidth/2) + 'px';

    //指定範囲内から選択された値
    if(value < 0) value = max_val;
    else if (value > slider.clientWidth) value = min_val;  
    value = Math.round(value / step_width) * step + min_val;
    //テキストエリアにセット
    output.value = value;
  };
  set_value();

  // バー部分をクリックしたとき
  slider.onclick = function(evt){
    dragging = true;
    document.onmousemove(evt);
    document.onmouseup();
  };
  // ドラッグ開始
  input.onmousedown = function(evt){
    dragging = true;
    return false;
  };
  // ドラッグ終了
  document.onmouseup = function(evt){
    if (dragging) {
      dragging = false;
      output.value = value;
      //つまみの色を戻す
      input.style.color = "#A6937C";
    }
  };

  document.onmousemove = function(evt){
    if(dragging){
      // ドラッグ途中
      if(!evt){
        evt = window.event;
      }
      //マウスのx座標の位置
      var left = evt.clientX;
      //スライダーの位置
      var rect = slider.getBoundingClientRect();
      // マウス座標とスライダーの位置関係で値を決める
      value = Math.round(left - rect.left - width);
			
      //つまみの位置を目盛にあわせる		
      value = Math.round(value / slider.clientWidth * 10 ) * step_width;	
	
      // スライダーからはみ出したときの修正
      if (value < 0) {
        value = 0;
      } else if (value > slider.clientWidth) {
        value = slider.clientWidth;
      }
		
      //スライダーバー
      bar1.style.left = "0px";
      bar1.style.width = value + "px";
      bar1.style.top = "0px";
      //つまみの色
      input.style.color = "#D24034";
	
      set_value();
      return false;
    }
  };
};

ちなみに、jQuery を使うスライダー
jQuery UI