しんぷるハック

WordPress:更新した記事を画像付きでTwitterに自動通知するためのコード

カテゴリ:

WordPress

,

WordPressカスタマイズ

投稿日:2014年11月14日 11:09 投稿者:管理人

更新した記事をTwitterに通知しているそこのアナタ、たぶんdlvr.itとかIFTTTとか使っているんじゃないでしょうか?

僕も使ってました。ちょっと前まで。ほんの少し前まで。

でも、もうやめました。というのもやっぱりラグが気になるんですよ。ほとんどのサービスがRSSフィードを取得してからTwitterに投稿する仕様になっているので、記事がRSSフィードに流れるまでの待ち時間、サービスがRSSフィードを取得するまでの待ち時間、これが積み重なると結構なラグになります。

あと、ニュース系のサイトだと記事を投稿した直後に通知して30分後や1時間後に再度、通知したいことってあると思うんです。Twitterのタイムラインの性質上目にとまらない事がほとんどですからね。それを実現するためにdlvr.itを使っていたんですが、RSSフィードを取得する時間の影響か、通知時間もバラバラになっちゃうんですよね。

30分後に通知したかったのにたった5分後に通知されてしまったりね・・・「おい、こいつこんな短時間で何回も通知してくんじゃねーよ・・・」って思われてたらどうしようとか考えちゃいます。

ということで、記事を投稿したらすぐにTwitterに通知できて(もちろんサムネイル付きで)、30分後に再通知デキるコードを載せておきます。

▼記事の公開時に呼び出される

// 記事公開時のフック
add_action( 'transition_post_status', 'rollout_post', 10, 3 );
// 予約投稿時のフック
add_action('publish_future_post', 'rollout_post', 10, 3);

function rollout_post ( $new_status, $old_status, $post ) {

    $rag_time = 30;// ここを変更すると再通知する時間を変えられる。分単位

    // 既に公開済みの記事は通知しない
    if ( $new_status != 'publish' ) {
        return;
    }

    // まだ公開してない記事のみを公開
    switch($old_status){
        case 'draft':
        case 'pending':
        case 'auto-draft':
            post_tweet( $post->ID, "【ブログ更新】" );
            $args = array ( "id" => $post->ID );
            wp_schedule_single_event(time() + 60 * $rag_time, 'postcron', array( $args ));
            break;
    }
}

▼Twitterに再通知する時に呼び出される
// 再通知処理
add_action( 'postcron', 'tweetcron', 1, 1 );

function tweetcron ( $args ) {
    post_tweet( $args["id"], '【ちょっと前に更新したエントリー】' );
}

▼Twitterに投稿するやつ
// 更新通知をTwitterに投稿
function post_tweet ( $tweet_post_id, $head ) {

        // tmhOAuthの読み込み
        locate_template( array( 'tmhOAuth.php' ), true, true );

        // URLを取得
        $tweet_info["url"] = get_permalink($tweet_post_id);
        // タイトルを取得
        $tweet_info["title"] = get_the_title($tweet_post_id);
        // サムネイルを取得
        if ( has_post_thumbnail( $tweet_post_id ) ) {
            $post_thumbnail_id = get_post_thumbnail_id($tweet_post_id);
            $tweet_info["thumbnail"] = wp_get_attachment_image_src($post_thumbnail_id, 'full');
            $tweet_info["thumbnail"] = $tweet_info["thumbnail"][0];
            $tweet_info["thumbnail_image"] = file_get_contents($tweet_info["thumbnail"]);
            $tweet_info["thumbnail_size"] = getimagesize($tweet_info["thumbnail"]);
        } else {
            $tweet_info["thumbnail"] = ※サムネイルが設定されていない場合の画像URL;
            $tweet_info["thumbnail_image"] = file_get_contents($tweet_info["thumbnail"]);
            $tweet_info["thumbnail_size"] = getimagesize($tweet_info["thumbnail"]);
        }

        // Twitterに投稿するメッセージを生成
        $message = $head.$tweet_info["title"].' '.$tweet_info["url"];

        // Twitterに投稿するためのトークンやキーを設定
        $login_info = array(
                            'consumer_key' => ※Consumer Key, // 事前にhttps://apps.twitter.com/で取得しておく
                            'consumer_secret' => ※Consumer Secret, // 事前にhttps://apps.twitter.com/で取得しておく
                            'user_token' => ※Access Token, // 事前にhttps://apps.twitter.com/で取得しておく
                            'user_secret' => ※Access Token Secret, // 事前にhttps://apps.twitter.com/で取得しておく
                            'curl_ssl_verifypeer' => false
        );

        // Twitterに投稿するメッセージとサムネイルを設定
        $tweet = array ( 'media[]' => $tweet_info["thumbnail_image"]. ";type=" . $tweet_info["thumbnail_size"]['mime'] . ";filename=" . basename( $tweet_info["thumbnail"] ), 'status' => $message );

        // Twitterに投稿
        $tmhOAuth = new tmhOAuth( $login_info );
        $code = $tmhOAuth->request(
                        'POST', 
                        'https://api.twitter.com/1.1/statuses/update_with_media.json',
                        $tweet,
                        true,
                        true
        );
}

Twitterに投稿するコアな部分はtmhOAuthっていうライブラリを使用するので、tmhOAuth.phpをこちらからダウンロードしてWordPressのテーマファイルにぶっこんで上のコードと下のコードをfunctions.phpに書き込めばOK

©しんぷるハック All Rights Reserved.