SQLの窓

2017年05月03日


MastodonOAuthPHP の HttpRequest.php の解説

MastodonOAuthPHP の HttpRequest.php は、Mastodon 用というか、API 呼び出しに特化しているので、そのまま使うには少し改造が必要です。ですが、GET 呼び出しはとりあえずそのまま使えるので、仕様としての概要をだいたいは知る事ができます。

get_and_save.php
<?php
session_cache_limiter('nocache');
session_start();

header( "Content-Type: text/html; charset=utf-8" );

// **********************************************
// クラス定義の読み込み
// **********************************************
require_once("HttpRequest.php");

// **********************************************
// 【クラスの参照】
// HttpRequest の別名を MastodonHttp として使用
// **********************************************
use \theCodingCompany\HttpRequest as MastodonHttp;

$path = "0502/std.html";

// **********************************************
// ペース URL を設定をしたインスタンスの取得
// **********************************************
$http = MastodonHttp::Instance("http://localhost");

// **********************************************
// static メソッドの実行
// **********************************************
$result = $http::Get($path);



file_put_contents('get_and_save.txt', $result );

?>
保存しました


クラスの参照

まず、HttpRequest クラスは名前空間が theCodingCompany で定義されているので、require_once で読み込んだ後、use \theCodingCompany\HttpRequest as MastodonHttp; で、MastodonHttp という名前で使えるようにします。

※ 別名を定義する必要は無いのですが、use \theCodingCompany\HttpRequest は参照するのに必要です。

コンストラクタが protected

使い勝手の理由だと思いますが、new でインスタンスを作らずに instance メソッドを実装してインスタンスを作成するようになっています。内部メソッドは全て static なので、インスタンス化しなくても呼べるはずですが、API 用の $base_url と $base_path を保存した上で インスタンス化して使用しています。

※ インスタンス化されたクラスオブジェクトから static なメソッドにはアクセスできます

static 仕様にした本当の理由は解りませんが、get_called_class を使用して呼び出し元からの インスタンス作成で必ず再利用できるようになっているようです。( instance メソッド を何度読んでも一度しか作成されないので、結果的には static メソッドのクラスを使うのと同じようになっています )

コンストラクタと instance メソッド
    // コンストラクタ
    protected function __construct($base_url = "", $base_path = "/") {            
        self::$base_path = $base_path;
        self::$base_url = $base_url;
    }
    
    // インスタンス作成用メソッド
    public static function Instance($base_url = "", $base_path = "/"){
        $cls = get_called_class();
        if(!isset(self::$instance[$cls])){
            self::$instance[$cls] = new HttpRequest($base_url, $base_path);
        }
        return self::$instance[$cls];
    }


結果的に $http::Get($path); は、$http がインスタンスで、インスタンスから static メソッドを呼び出しています。

Post メソッドは API に特化
    public static function Post($path = "", $parameters = array(), $headers = array()){
        //Sen the request and return response
        $post_data = json_encode($parameters);
        return self::http_request(
            "POST", 
            self::$base_url.self::$base_path.$path, 
            $headers,
            $post_data
        );
    }

データ部分が JSON フォーマットに固定されています。このままでは一般用では使用できないのですが、private メソッドの http_request が結果的に一般仕様なので、これを public に変更すると使えるはずです。

http_request を public にして使用 

public で、URL は直接指定なので、インスタンス作成する必要もありません。
<?php
session_cache_limiter('nocache');
session_start();

header( "Content-Type: text/html; charset=utf-8" );

// **********************************************
// クラス定義の読み込み
// **********************************************
require_once("HttpRequest.php");

// **********************************************
// 【クラスの参照】
// HttpRequest の別名を MastodonHttp として使用
// **********************************************
use \theCodingCompany\HttpRequest as MastodonHttp;

// **********************************************
// POST
// **********************************************
MastodonHttp::http_request("POST","http://localhost/0502/post_and_save.php", array(), array( "text" => "投稿データ" ) );

?>
投稿しました



【PHP + 通信の最新記事】
posted by lightbox at 2017-05-03 20:58 | Comment(0) | PHP + 通信 | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり