現役プログラマのWordPressカスタマイズ相談

WordPress(ワードプレス)のお悩み、うまくいかなくてお困りなこと、不具合調査、新規制作依頼まで、ウェブアプリケーションエンジニアがあなたをサポートします。

XML-RPCを使いFC2ブログへ画像を投稿する

f:id:jsaz:20161211162440p:plain

前回はPHPを使いFC2ブログへ記事投稿するスクリプトを記事にしました。
今回は画像ファイルを投稿するスクリプトをメモ。

http://soudan.hatenablog.jp/entry/fc2-xmlrpcsoudan.hatenablog.jp


画像添付はできますが、アイキャッチ画像への登録は現時点では解決していません。。。
今回もサンプルPHPスクリプトを掲載しています。





<オンラインブートキャンプ>
無料体験と割引キャンペーン実施中
WordPressコース
Webアプリケーションコース
「実用的なスキルを身につけたい」「自分のWebサービスを作れる」そんな思いをお助けします。

FC2ブログへ画像をアップロードするサンプルコード


FC2ブログへの記事投稿を元にしたソースコードです。
諸設定は前回の記事を参考にしてください。

private function __post_img_fc2($post_img_path) {
	//画像を取得する
	$bits = file_get_contents($post_img_path);
	//画像ファイル名
	$name = basename($post_img_path);
	//画像情報を作成
	$imgfile = new XML_RPC_Value(
		array(
			'bits' => new XML_RPC_Value($bits , 'base64'),
			'name' => new XML_RPC_Value($name , 'string'),
		),
		'struct'
	);
	
	try {
		$GLOBALS['XML_RPC_defencoding'] = "UTF-8";
		//XML_RPCクライアント
		$client = new XML_RPC_client(self::FC2_RPC, self::FC2_BLOG_URL, self::FC2_PORT);
		//ブログID
		$blogid = new XML_RPC_Value(self::FC2_BLOG_ID, 'string');
		//アカウント
		$username = new XML_RPC_Value(self::FC2_BLOG_USER, 'string');
		//パスワード
		$passwd = new XML_RPC_Value(self::FC2_BLOG_PASS, 'string');
		//公開設定
		$publish = new XML_RPC_Value(true, 'boolean');
		//XML-RPCメソッドのセット
		$post_data = new XML_RPC_Message(
				'metaWeblog.newMediaObject',
				array(
					$blogid,
					$username,
					$passwd,
					$imgfile,
				)
		);
		//送信
		$result = $client->send($post_data);	
		if( !$result ){
			echo __FUNCTION__ . " error\n";
			echo "'Could not connect to the server.<br>\n";
			return false;
		}else if( $result->faultCode() ){
			echo __FUNCTION__ . " error\n";
			echo "XML-RPC fault <br>\n(".$result->faultCode()."): ".$result->faultString();
			return false;
		}
		XML_RPC_decode( $result->value() );
		//debug( $result->xv->me['struct']['thumbnail_url']->me['string']);
		return $result->xv->me['struct']['thumbnail_url']->me['string'];
	} catch (Exception $ex) {
		throw new Exception($ex->getMessage());
	}
}


$post_img_pathは自分のサーバー内の画像パスです。
FC2ブログbase64などの変換は不要みたいです。


送信後の戻りには、FC2ブログの画像パスが返ってきます。
thumbnail_urlを取得したければ、下記のようにすると取得することができます。

$result->xv->me['struct']['thumbnail_url']->me['string']