youtubeの検索結果をWordPressに自動投稿する方法
2024/03/04
youtubeから特定のキーワードで検索した動画をWordPressに自動で投稿したいという案件があった。半自動ならプラグインは見つけられたけど、完全自動のものは見つけられなかったので、XML-RPを用いて関数を作成した。以下に使い方のメモ。
ダウンロード先
http://scripts.incutio.com/xmlrpc/
関数
//----------------------------------------
// WordPress外部投稿
//
// **引数**
// $dir(string) このプログラムとIXR_Library.phpを置いてあるディレクトリを絶対パスで指定
// $domain(string) 投稿したいWordPressを置いているサーバのドメイン
// $user(string) WordPressのユーザー
// $pass(string WordPressのパスワード
// $author(int) 投稿者のID
// $status(string) 投稿状態。デフォルトは下書き。publishだと公開
// $category(int) 投稿カテゴリ。デフォルトは未分類
// $searchWord(string) youtubeの検索ワード
// $filter(string) youtubeのフィルタをクエリで指定。空だと関連性の高い順
// $tag(array) 投稿タグ。デフォは何もなし
//
// **返り値**
// bool(true or false)
//----------------------------------------
function postYoutubeWordPress( $dir, $domain, $user, $pass, $author = 1, $status = 'draft', $category = 1, $searchWord, $filter, $tag )
{
//必須引数のチェック
if( !$dir || !$domain || !$user || !$pass || !$searchWord ){
return false;
}
//ライブラリの読み込み
include_once($dir . 'IXR_Library.php');
$client = new IXR_Client($domain . 'xmlrpc.php');
//SQLite開く。テーブル無ければ作る
$dbFile = $dir . 'youtube.sqlite';
$dbFlg = ( file_exists($dbFile) ) ? true : false;
$sqlite = new SQLite3($dbFile);
if( !$dbFlg ){
$query = "
CREATE TABLE 'youtube'
(
'seq' INTEGER PRIMARY KEY,
'title' TEXT,
'movie' INT
);
";
$result = $sqlite->query($query);
}
//youtubeからデータ取得
$youtube = 'https://www.youtube.com/results?search_query=' . urlencode($searchWord) . $filter;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $youtube);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$line = curl_exec($curl);
$line = mb_convert_encoding($line,'UTF-8','auto');
//取得したデータから正規表現で動画IDとtitleを取得
$pattern="/<a href=\"\/watch\?v=(.*?)\"[\n|\s]class=\".*?\"[\n|\s]data-sessionlink=\".*?\"[\n|\s]title=\"(.*?)\"[\n|\s]/";
$match = array();
preg_match_all($pattern, $line, $match, PREG_SET_ORDER);
//ループ処理
for ($i = 0; $i< count($match); $i++) {
$movieId = $match[$i][1];
$movieTitle = $match[$i][2];
//既に登録されていないかチェック
$query = '
SELECT *
FROM youtube
WHERE movie = "'. $movieId .'"
LIMIT 1
';
$result = $sqlite->query($query);
$flg = false;
while ($rs = $result->fetchArray()) {
if( $rs['seq'] ) $flg = true;
}
if( $flg ) continue;
//登録されていない場合はDBに登録
$query = '
INSERT INTO youtube
(title, movie)
VALUES
("'. $movieTitle .'", "'. $movieId . '")
';
$result = $sqlite->query($query);
$iframeUrl = '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . $movieId . '" frameborder="0" allowfullscreen></iframe>';
$postData = array(
'post_author' => $author,
'post_status' => $status,
'post_title' => $movieTitle,
'terms' => array('category' => array($category)),
'post_content' => $iframeUrl,
'terms_names' => array('post_tag' => $tag)
);
$return = ( $result = $client->query('wp.newPost', 1, $user, $pass, $postData) ) ? true : false;
if( !$return ){
return $return;
}
}
return $return;
}
使い方
cronで回すことを想定したのでディレクトリは絶対パスで指定する。あとフィルタのクエリに関しては「&filters=week&lclk=week」みたいな形で指定。
WordPressのプラグインでVideo Thumbnailsをインストールして有効化しておくとアイキャッチ画像を自動で設定してくれるので、これもインストールしておく。
あとはcronで回す。
関連記事
-
-
Polylangのスイッチャーとページャーの組み合わせ方法
WordPressで多言語サイトを作成するにあたりPolylangというプラグイ ...
-
-
Contact form7でフォーム送信時に別サーバへもデータを送信する方法
contact form7でフォーム送信時に別サーバーでフォーム内容をPOST送 ...
-
-
WordPressでオリジナルのプラグインを作成する方法
WordPressでオリジナルのプラグインを作成する方法を以下にメモ。 &nbs ...
-
-
WordPressでテーマファイル内で共通の変数を設定及び使用する方法
WordPressでテーマ内の共通変数を設定し使用したかった。例えば記事一覧ペー ...
-
-
WordPressで固定ページに記事一覧を表示させるプラグイン
WordPressで固定ページ編集時にショートコードを書くことで、記事一覧を表示 ...