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で回す。
関連記事
-
WordPressで画像にカテゴリを設定し、記事投稿の際の画像選択時に指定したカテゴリの画像のみ表示させる方法
WordPressのメディアライブラリに画像を沢山登録していると、記事投稿の際の ...
-
WordPressでカテゴリに優先順位を決め複数カテゴリが設定されている記事の場合に優先順位の高いカテゴリの記事のみ取得
WordPressで精度の高い関連記事を表示させたい。色々試したところテーマファ ...
-
WordPressで閲覧者にテーマを変更させるプラグイン(Theme Switcher)
「新規サイトを○○みたいなイメージでWordPressのテーマを見繕って欲しい」 ...
-
WordPressで翌日以降に編集した記事のみ最終更新日を表示する方法
WordPressで翌日以降に編集した記事のみ最終更新日を表示させたい。逆に言う ...
-
WordPressで記事毎に設定したバナー広告を表示させる方法
WordPressでGoogleアドセンスのようなクリック広告ではなく、商品を指 ...