[WordPress/twitter/cron]条件合致したWordPress記事を定時に自動ツイートする仕組み #WordPress #twitter #cron #php #TwitterOAuth

  • スポンサーリンク

  • スポンサーリンク

概要

条件合致したWordPress記事を定時に自動ツイートする仕組みを構築してみました。

主な使用技術

・twitterアプリ設定
・twitterアプリを用いてphpでツイートするプログラム作成
・WordPressの記事を読み込むプログラム作成
・ロリポップcron設定

処理の流れ

(1)ロリポップcronにより、指定された時刻等にsh起動(実験の結果、php直接起動が出来ないため)
(2)phpプログラム起動
・WordPress記事読み込み
・記事のタイトル、リンク、アイキャッチ画像をtwitterに投稿
(3)twitterに自動投稿される

適用例

WordPress対象サイト:http://sample.nakamurayuji.com/wp2/art/exhibition
自動投稿されるtwitter: https://twitter.com/testug1965
※twitter投稿例の画像:
スクリーンショット 2016-03-19 16.28.15

各技術ごとの詳細(参考サイトとともに)

(1)twitterアプリ設定
Twitter Application Managementにアクセスし、
・Consumer Key
・Consumer Secret
・Access Token
・Access Token Secret
の4つを取得します。
こちらのサイトを参考にすれば比較的簡単に処理可能と思います。
PHPからTwitterツイート(2015年2月版) – Qiita

(2)twitterアプリを用いてphpでツイートするプログラム作成
・こちらも先ほどのサイト( PHPからTwitterツイート(2015年2月版) – Qiita )で問題ないですが、あとで設定するロリポップのcronのマニュアルに、プログラム内部の参照は絶対パスで記述する旨記載されていたのでそこを対応。
・また、画像を投稿する場合も、同じサイトの別記事に参考ありました!→abraham/twitteroauthを使う – Qiita

(3)WordPressの記事を読み込むプログラム作成
これが難関かとおもいきや、たった1行の追加で実現できました。これさえ行えば、あとは、WordPressの関数を思いの通り使用すれば良いです。
外部の php クラスや関数から WordPressの関数あるいはタグを含めた API を扱う方法 : WordPressをインストールしてみた

(4)ロリポップcron設定
ここが一番ハマりました。
ロリポップのcronマニュアル:cron設定 / ユーザー専用ページ / マニュアル – レンタルサーバーならロリポップ!
を参考に設定したものの、下記のようなエラーが。

X-Powered-By: PHP/5.2.17
Content-type: text/html

<br />
<b>Parse error</b>:  syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING or '(' in <b>/home/users/ユーザディレクトリ/web/sample/wp2/◯◯◯.php</b> on line <b>11</b><br />

まず、コチラのサイト:ロリポップサーバーでCronの使い方の下の方に、

■ロリポップのphpは初期設定でphp5.2になっています。
スクリプトの先頭には「#!/usr/local/php5/bin/php」と記入してください。
phpを5.3や5.4に変更していた場合は「#!/usr/local/php53/bin/php」か「#!/usr/local/php54/bin/php」に変更してください。

とあり、該当サイトのPHPが5.4だったことから、「#!/usr/local/php54/bin/php」と記述したものの、実は、「php54」ではなく「php5.4」と記述することがロリポップのこちら( PHP設定 / ユーザー専用ページ / マニュアル – レンタルサーバーならロリポップ! )
スクリーンショット 2016-03-19 19.26.03
に記載されておりましたので修正。

それでもエラーのまま動作しなかったので色々ググった結果、こちらのサイトがまさにどんぴしゃ!!(Google万歳ですよ!)
ロリポップでcron向けのPHPのバージョンがおかしい件

このサイトの説明通り、シェルスクリプトをcronで指定し、そこからphpを起動する方法に変更したら動作しました!!

最終的なphpコード(一部省略しています)

#!/usr/local/php5.4/bin/php

<?php

//WordPressと連携、フルパスで記述
require (dirname( __FILE__ ) . '/wp-blog-header.php');

// OAuthライブラリの読み込み、フルパスで記述
require (dirname( __FILE__ ) . '/twitteroauth/autoload.php');
use Abraham\TwitterOAuth\TwitterOAuth;

//twitter認証情報4つ(桁数も実際とは異なります)
$consumerKey = "XXXXXXX";
$consumerSecret = "XXXXXXXXXXX";
$accessToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$accessTokenSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

//twitter接続
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

//日本の時間に設定
date_default_timezone_set('Asia/Tokyo');

//WordPress Query 定義、あるカスタムフィールドの値で降順に並び替えた上で、3記事を投稿しています。これは一例ですので仕様に応じて修正を。
query_posts( array( 'posts_per_page' => 3, 'orderby' => 'meta_value' , 'meta_key' => 'カスタムフィールド名称' , 'order' => 'DESC' ) );

// ループ(改変したメインクエリ)
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
		//記事タイトルとリンクを取得
		$temp_title = get_the_title();
		$permalink = get_permalink();

		//アイキャッチがある場合は画像付きで投稿
		if (has_post_thumbnail()) {
			//時刻取得
			$nowtime = date( "m/d H時i分" ) ;

			// アイキャッチ画像のIDを取得
			$thumbnail_id = get_post_thumbnail_id();
			//アイキャッチ情報取得
			$image_info = wp_get_attachment_image_src($thumbnail_id);
			//リンクは配列[0]
			$image_link = $image_info[0];
			//メディアアップロード
			$media_id = $connection->upload("media/upload", array("media" => $image_link));
			//投稿、時間、タイトル、リンク、画像
			$res = $connection->post("statuses/update", array("status" => ( $nowtime . ' ' . $temp_title . " " . $permalink) , "media_ids" => $media_id->media_id_string ));
		//アイキャッチがない場合はタイトルとリンクのみ投稿
		} else {
			//投稿、時間、タイトル、リンク
			$res = $connection->post("statuses/update", array("status" =>  ( $nowtime . ' ' . $temp_title . " " . $permalink) ));
		}

		//動作確認用としてタイトルを表示
		echo "<p>" . $temp_title ."</p>";
    endwhile;
else:
    // 何も取得されなかった
endif;

// クエリをリセット
wp_reset_query();
?>

最終的なshコード

#!/bin/bash
/usr/local/php5.4/bin/php /home/users/ユーザフォルダ/web/sample/wp2/◯◯◯◯◯.php

最終的なcron設定

スクリーンショット 2016-03-19 19.28.23

参考サイト(ありがとうございます!上記で紹介したものをまとめているのみです)

・twitterアプリを用いてphpでツイートする
http://qiita.com/tsunet111/items/9309801cd3e3bcf6e32a
・twitterへphpを用いて画像投稿する
http://qiita.com/kino0104/items/9f9e6f75d58b40663673
・WordPress連携
http://wp-setting.info/setting/php-use-wordpress-api.html
・cron設定する際の注意(PHPプログラム側、及び、cron側)
http://servercheap.info/lolipop/cron.html
http://specialized.jp/lolipop_cron_trouble/
・ロリポップcronマニュアル
https://lolipop.jp/manual/user/cron/
・ロリポップPHP設定
https://lolipop.jp/manual/user/php-setting/

後日談

動作しているロリポップのcron、1時間おき動作のはずが、時々動作しないことがあるようで、これについてはちょっとよくわかりません。
しばらく様子見したいと思います。
スクリーンショット 2016-03-19 19.22.59

これで紹介は以上になります。


  • スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA