お世話になります。
知識がなくて大変恐縮なのですが、どなたかお力添えいて抱けると幸いです。
実現したいこと
facebookの予約投稿の作成で、WPの「予約投稿」ステータスの記事のOGP情報を取得させたい。
概要
通常WPの予約投稿記事は閲覧権限があるユーザーとしてログインしていないと404となってしまいますが、facebookのクローラに対しては通常通り記事を閲覧させ、OGPタグ情報を取得させたいです。
これを実現するため、
facebook用のアカウント「facebook_ua」を権限グループ「編集者」で用意し、facebookのクローラから予約投稿の記事にアクセスがあった際は「facebook_ua」としてログインさせ、記事を公開する。
という方法を考えてみました。
facebookのクローラはユーザーエージェントに「facebookexternalhit」を含んでいるようです。
※https://developers.facebook.com/docs/sharing/webmasters/crawler?locale=ja_JP
従って、
「予約投稿」ステータスの記事にアクセスがあった際は、facebookクローラからのスクレイピングを判別し、「facebook_ua」としてログインさせ、リクエストのあった同じページにリダイレクト処理を行えば「facebook_ua」の権限グループ「編集者」としてアクセスできるので正常に記事が見れる。
と予測し、parse_queryのフィルターに下記コードでフックしてみました。
※すみません。色々突っ込みどころの有るコードでお恥ずかしいのですが。。。
PHP
1function facebookCrawler($query){ 2 3 if( !is_single() ) return false; 4 if( is_user_logged_in() ) return false; 5 6 $query_p = $query->query['p']; 7 $access_ua = $_SERVER['HTTP_USER_AGENT']; 8 $fb_ua = 'facebookexternalhit'; 9 10 if( get_post_status($query_p) != 'future' ) return false; 11 if( strpos($access_ua, $fb_ua) === false ) return false; 12 13 $login_info = array( 14 'user_login' => 'facebook_ua', 15 'user_password' => 'password', 16 'remember' => false 17 ); 18 19 $user_info = wp_signon($login_info, false); 20 21 if( is_wp_error($user_info) ) { 22 wp_redirect( home url() ); 23 exit; 24 } 25 26 wp_redirect( get_the_permalink($query_p).'/'); 27 exit; 28} 29 30add_filter('parse_query','facebookCrawler');
上記コードをfunctions.phpに記述したうえで、
chromeでユーザーエージェントを「facebookexternalhit」に偽装しアクセスしたところ、
ブラウザでの挙動は狙ったとおりになりました。ですが、facebookのobjectデバッガー(https://developers.facebook.com/tools/debug/og/object/)での結果は、
「入力URLのパース中にエラーが発生しました。キャッシュまたはスクレイピングされたデータはありません。」
と表示されてしまい、正常に読み込めませんでした。
この結果に対しての予測として、
クローラはクッキー情報を保持できない。従って、一度ログイン処理させてもリダイレクトが発生した時点でクッキー情報を失ってしまい、アクセスに失敗した。
と考えたのですが、デバッガの結果を見るとステータスコードが404ではなく、302だったのでイマイチピンと来ていません。
ユーザーエージェントを偽装すれば予約投稿記事が見れてしまうという欠点は承知の上です。
①ブラウザの挙動と同じ通りに行かないのは予想した通り、クローラがクッキー情報を持てないからなのか
②そもそもfacebookにWPの予約投稿ステータスの予約投稿する方法は存在するのかの2点をご教示いただけるとありがたいです。
知見がある方、何卒お力添えのほど、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/31 10:04