無料ブログの自動投稿PHPプログラム

無料ブログの自動投稿PHPプログラム

PHP無料ブログの自動投稿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();
    }
}

最終更新日:

関連記事

人気記事

新着情報