主要無料ブログ5つに対する自動投稿PHPプログラム

主要無料ブログ5つに対する自動投稿PHPプログラム

記事一覧主要無料ブログ5つに対する自動投稿PHPプログラム

アメブロへ楽天APIなどの情報を自動で投稿する の反響が良かったので、どうせならアメブロ以外の無料ブログの XML-RPC を使った自動投稿も紹介したいと思います。これには FC2BlogManager.php というライブラリが便利なので利用します。

ざっと調べたところ、現在、XML-RPC による投稿に対応している無料ブログサービスは「goo」「so-net」「FC2」「jugem」「SeeSaa」なので、この 5 つのブログへ投稿するためのソースを公開します。っといっても、FC2BlogManager のライブラリを使うとほとんど同じプログラムでいけるので楽々です。ブログによって、少しパラメータを変える程度ですが、そこを探すのは少し苦労しました。

FC2BlogManager.phpの調整

よって、FC2BlogManager.php は下記のメソッドの中身を少し調整しています。これによって、5 つの無料ブログでそのまま使えるようになります。よかったら参考にして下さい。

public function postEntry($title, $content, $blogid = 0){
    if ($blogid === 0) {
        $blogid = new XML_RPC_Value( 0, 'string');
    } else if ($blogid === '') {
        $blogid = new XML_RPC_Value( '', 'string');
    } else {
        $blogid = new XML_RPC_Value( $blogid, 'string');
    }
    $username = $this->createStringValue($this->user);
    $passwd = $this->createStringValue($this->password);
    $content = new XML_RPC_Value(
        array(
            'title'=> $this->createStringValue($title),
            'description'=> $this->createStringValue($content),
            'dateCreated'=>
                new XML_RPC_Value(date("Ymd\TH:i:s", time()),
                                  'dateTime.iso8601')),
        'struct');
    $publish = new XML_RPC_Value(1, 'boolean');
    $message = new XML_RPC_Message(
                   self::COMMAND_POSTENTRY,
                   array($blogid, $username, $passwd, $content, $publish));
    
    $result = $this->sendMessage($message);
    return $result;
}

各無料ブログへの自動投稿

また、SeeSaa だけは独自の「ブログID」の取得が必要なので、自分のブログにログインして ID を探して下さい。ブログにログインすると、ブログ一覧に自分のブログタイトルがリンクで表示されるので、そのリンクの URL に付いている blog_id= のパラメータが「ブログID」になります。ちょっと面倒ですけどね・・・。

function ameba($title, $text) {

    define('USER_ID', '[ID]');
    define('USER_PASS', '[PASSWORD]');

    $atomapi_url = 'http://atomblog.ameba.jp/servlet/_atom/blog';

    $created = date('Y-m-d\TH:i:s\Z');
    $nonce = sha1(md5(time()));
    $pass_digest = base64_encode(pack('H*', sha1($nonce.$created.strtolower(md5(USER_PASS)))));

    $wsse = 'UsernameToken Username="'.USER_ID.'", '.
            'PasswordDigest="'.$pass_digest.'", '.
            'Nonce="'.base64_encode($nonce).'", '.
            'Created="'.$created.'"';

    $ameHeader = "X-WSSE: " . $wsse;

    $rawdata = sprintf('
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://purl.org/atom/ns#" xmlns:app="http://www.w3.org/2007/app#" xmlns:mt="http://www.movabletype.org/atom/ns#">
<title>%s</title>
<content type="application/xhtml+xml">
<![CDATA[%s]]>
</content>
</entry>', a, b);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $atomapi_url);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_HTTPHEADER,array($ameHeader));
    //curl_setopt($ch, CURLOPT_GET, true);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $res = curl_exec($ch);
    curl_close($ch);

    preg_match('/rel="service.post" type="application\/x\.atom\+xml" href="(.*?)"/',$res,$postURl);

    $rawdata = sprintf('
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://purl.org/atom/ns#"
xmlns:app="http://www.w3.org/2007/app#"
xmlns:mt="http://www.movabletype.org/atom/ns#">
<title>%s</title>
<content type="application/xhtml+xml">
<![CDATA[%s]]>
</content>
</entry>', $title, $text);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $postURl[1]);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER,array($ameHeader));
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$rawdata);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $res = curl_exec($ch);
    curl_close($ch);
}

function fc2($title, $text) {

    define('USER_ID', '[ID]');
    define('USER_PASS', '[PASSWORD]');

    $fc2_host = "blog.fc2.com";
    $fc2_xmlrpc_path = "/xmlrpc.php";

    try {
        $bm = new FC2BlogManager($fc2_host, $fc2_xmlrpc_path);
        $bm->setUser(USER_ID);
        $bm->setPassword(USER_PASS);
        $bm->postEntry($title, $text);
        var_dump($bm->getBlogs());
    } catch(Exception $e) {
        echo $e->getMessage();
    }
}

function goo($title, $text) {

    define('USER_ID', '[ID]');
    define('USER_PASS', '[PASSWORD]');

    $goo_host = "blog.goo.ne.jp";
    $goo_xmlrpc_path = "/xmlrpc.php";

    try {
        $bm = new FC2BlogManager($goo_host, $goo_xmlrpc_path);
        $bm->setUser(USER_ID);
        $bm->setPassword(USER_PASS);
        $bm->postEntry($title, $text, USER_ID);
        var_dump($bm->getBlogs());
    } catch(Exception $e) {
        echo $e->getMessage();
    }
}

function jugem($title, $text) {

    define('USER_ID', '[ID]');
    define('USER_PASS', '[PASSWORD]');

    $jugem_host = USER_ID . ".jugem.jp";
    $jugem_xmlrpc_path = "/admin/xmlrpc.php";

    try {
        $bm = new FC2BlogManager($jugem_host, $jugem_xmlrpc_path);
        $bm->setUser(USER_ID);
        $bm->setPassword(USER_PASS);
        $bm->postEntry($title, $text);
        var_dump($bm->getBlogs());
    } catch(Exception $e) {
        echo $e->getMessage();
    }
}

function seesaa($title, $text) {

    define('USER_ID', '[ID]');
    define('USER_PASS', '[PASSWORD]');
    define('BLOG_ID', '[BLOG_ID]');

    $seesaa_host = "blog.seesaa.jp";
    $seesaa_xmlrpc_path = "/rpc";

    try {
        $bm = new FC2BlogManager($seesaa_host, $seesaa_xmlrpc_path);
        $bm->setUser(USER_ID);
        $bm->setPassword(USER_PASS);
        $bm->postEntry($title, $text, BLOG_ID);
        var_dump($bm->getBlogs());
    } catch(Exception $e) {
        echo $e->getMessage();
    }
}

function so-net($title, $text) {

    define('USER_ID', '[ID]');
    define('USER_PASS', '[PASSWORD]');

    $so-net_host = "blog.so-net.ne.jp";
    $so-net_xmlrpc_path = "/_rpc";

    try {
        $bm = new FC2BlogManager($so-net_host, $so-net_xmlrpc_path);
        $bm->setUser(USER_ID);
        $bm->setPassword(USER_PASS);
        $bm->postEntry($title, $text, USER_ID);
        var_dump($bm->getBlogs());
    } catch(Exception $e) {
        echo $e->getMessage();
    }
}

参考カテゴリ

オススメ記事

最新の投稿やよく見られているのオススメ記事一覧です。

AmazonLinuxでEC2起動時にスワップ領域の割り当てに失敗

EC2 起動時のスワップ領域割り当てですが、これまでは以下の記事を参考に、/etc/rc.local を使って行っていました。 ・ Amazon EC2(Linux)のswap領域ベストプラクティス しかし、最近になって、EC2 イン...

>>記事を確認する

【5分でできる】Laravel5.4から5.5へバージョンアップ

Laravel5.5 がついにリリースされたので、5.4 ベースで作っていたものをバージョンアップしてみました。 composer.json の以下の部分を 5.5.* に変更するだけですが、依存関係のパッケージも問題なくアップデ...

>>記事を確認する

【30分でできる】AWSのEC2にgoofysを入れてS3をマウント

過去に携わったプロジェクトで、S3FS の通信状態が悪い時があるので、アプリ側のプログラムを AWS SDK を使ったものに置き換えていこうという施策がありました。 S3FS の導入には関わっていなかったので、導...

>>記事を確認する

【30分でできる】ぐるなびAPIで飲食店の店舗情報取得

過去に作成した「ぐるなびAPI」のプログラムや、ぐるなびの Web Service が新しくなったこともあり、API からの情報取得プログラムを書き換えてみました。 以前の記事は下記になります。 ・ ぐるなびAPIで...

>>記事を確認する

NginxのFastCGIキャッシュで白い画面がキャッシュされる

以前から、トップページにアクセスすると、レスポンスステータスは 200 で返ってくるのに、画面に何も表示されない現象が稀に見受けられたので調査してみました。 さすがに機会損失にも繋がるということで、...

>>記事を確認する

Laravel5.4の認証ユーザーのパスワードハッシュについて

Laravel で用意されている認証モジュールを利用する際、ユーザーモデル(User.php)経由で登録されるパスワードのハッシュ方法について調べてみました。 Laravel 上ではパスワード文字列を bcrypt() のヘルパー...

>>記事を確認する

Laravel5.4のコントローラコンストラクタでAuth::user()が取得できない

Laravel5.4 で認証を通したアクセスに対して、コントローラのコンストラクタでユーザモデルの値を取得しようと思ったら、なぜか Auth::user() の値が取得できなくて悩みました。 public function __construc...

>>記事を確認する

NginxのHSTS(HTTP Strict-Transport-Security)の設定

「Let's Encrypt」のおかげで、全サイト SSL 化していますが、これまで nginx の設定では、http のアクセスがあった場合に https に 301 リダイレクトさせていました。 この場合、Googlebot に http のアク...

>>記事を確認する

GoogleMapのAPIキーの認証情報にリファラURL設定

昔は API キーを指定することで、JavaScript で GoogleMap が表示できていましたが、何年か前に、そのキーに対して認証情報の追加が推奨されました。 新規で発行する場合は必須になっているかもしれませんが...

>>記事を確認する

【30分でできる】AmazonLinuxでApache2.4+php7.1+Laravel5.5

先日、「 VagrantでCentOS6.9のイメージを使う 」の通り、CentOS6.9 には Apache2.4 と PHP7.1 で Laravel のフレームワークが使える環境を構築しました。 ただ、将来的には AWS かつ Amazon Linux 上で動か...

>>記事を確認する