2017年2月8日水曜日

dlvr.itによるtwitterへの自動投稿でtwitterカード表示にならない理由がやっとわかった。大した理由じゃなかった。

どうしてもエラーが出てた

あるサイトだけ更新情報をdlvr.itでトラッキングのためのパラメータが付加された状態でtwitterに投稿してもtwitterカード表示されなくて困ってた。
twitterカード検証ツールでもトラッキングのためのパラメータがあるときはエラーになった。

Fetching the page failed because it's denied by robots.txt.

こんなメッセージが出る。robots.txtはWordpressで余計なクロールをされないようにしてあるけど記事や画像は弾いてないのに、というかrobots.txtって関係あるの?と思っていた。

さらに検索して調べてたらやっと原因がわかった。

Wordpressで余計なクロールをされないための記述は何年か前にいろいろ検索した結果を元に書いていた。その中ある指定がtwitterカードを表示させなくしていた。

Disallow: /*?*
Disallow: /*?

この記述だ。URLにパラメータを付加したものは弾くようになっている。dlvr.itがトラッキングのためのパラメータを付加したらこれで弾かれてたのでtwitterカードが表示されなかったわけだ。
twitterカードの表示にrobots.txtって影響あるんだとやっと理解した。

あらためてrobots.txtを確認してみるとちょっと過剰に制限していたみたい。なので上記の記述を無くしたのはもちろんもっとシンプルにした。

この修正をしたら過去の投稿も含めてtwitterカード表示されるようになった。わかってみれば大した理由じゃなかったわけだけどそのへん詳しくないから思い至らなかった。

これでおしまい

ということでtwitterカードに関してはこれですべて完了となりました。



2017年2月6日月曜日

tumblrを更新したらdlvr.itにtwitterにカード表示で投稿する方法を模索

まずは特に設定せずにtumblrの更新をdlvr.itを通してtwitterに投稿してみる

tumblrをtwitterカードに対応させるにはtwitterで認証させるだけでいい。tumblrには設定やカスタマイズは必要ない。

tumblrを更新したらdlvr.itでtwitterに自動投稿する。特に変わったことする必要はないが、dlvr.itの設定で「Post As Photo」はオフにしておいたほうが良さそう。

という調査結果をもとに設定などをした
その結果twitterカード表示されなかった。

tumblrのURLがリダイレクトされるのが原因なのか?

twitterに表示されるurlは「dlvr.it/DDDDD」
twitter的には「t.co/TTTTT」
となっている。

これらを直接ブラウザにURLを貼り付けて表示させると「AAAAA.tumblr.com/post/NNNNN/BBBBB」
のようになる。
またRSSフィードを直接見るとURLは
「AAAAA.tumblr.com/post/NNNNN」
になっている。

上記URLをtwitterカード認証ツールに通すとうまく表示されるのは「AAAAA.tumblr.com/post/NNNNN/BBBBB」
だけで、他はエラーになる。エラーメッセージは
ERROR: Fetching the page failed because it resulted in too many redirects.
とある。
AAAAA.tumblr.com/post/NNNNN → AAAAA.tumblr.com/post/NNNNN/BBBBB
このリダイレクトがエラーになるのが一番の原因なのだろうか。

それでもdlvr.itを通したい

twitterに自動投稿するだけならdlvr.itを通さずにtumblrにもともとあるtwitter連携機能をオンにするだけでいいのだ。
ただこのtwitterにはほかのサイトの更新情報も投稿するので区別のために頭に「tumblr更新:」という文字列を加えたい。となるとやっぱりdlvr.itを通したい。

となるとtumblrのURLのリダイレクトをなくす方法があればいいことになる。tumblrの設定にはそんな項目はない。
しかしtumblrの各投稿のURLのパーマリンク(tumblrではフレンドリーURL)を自分で設定することができるのでそれをすればリダイレクトのないURLになるかもしれない。
と思って試したらそうではなかった。
AAAAA.tumblr.com/post/NNNNN → AAAAA.tumblr.com/post/NNNNN/BBBBB
となる。ただtwitterの認証ツールに通すとエラーにならない。

ここで本当のエラー原因らしきものがわかった。エラーしていたのはBBBBBの部分が日本語だったからみたい。

どうすることにしたか

BBBBBの部分は投稿内容からtumblrが自動で抜き出しているから日本語になるので英数字になるようにしなくてはいけない。
そのためにはtumblr投稿時にパーマリンク(フレンドリーURL)を自分で設定すればいい。これは手間が増えていまひとつすっきりしないけれどいまのところこれしかない。
tumblrではない別のサイトの更新時も毎回URLを英数字で決めていたのである意味慣れてはいるし。

どうなったか

カード表示になるときとならない場合がある。
どうやら画像があるとうまくいくがテキストのみだとカード表示にならない。
HTMLソースをみたらtwitterカードのためのコードがなかったのでこれがtumblrの仕様のようだ。

少し不完全だけどtumblrのtwitterカード対応の件はこれでおしまいにします。




2017年1月29日日曜日

TumblrをTwitterカードに対応させ、自動ツイートもIFTTTからdlvr.itに変更した

TumblrをTwitterカードに対応させる

Twitterカードに対応させる方法を調べてたらたまたまTumblrの対応のさせ方を見つけていた。
それはTumblrは設定・カスタマイズといったことをなにもしなくてもTwitterの検証ツールを通すだけでいいらしい。

そこでTumblrのHTMLをみたらたしかにTwitterカード向けの記述があった。ということでTwitterの検証ツールに通したので対応したはず。

TumblrからTwitterへの連携をdlvr.itに変更

Tumblrを更新したらTwitterに更新したことをIFTTTを使って自動ツイートするようにしてた。IFTTT経由でツイートするとIFTTTの短縮URLになる。これもTwitterカードは認識するのかな?と思いつつふとこのURLをクリックしたらTumblrのページが開かなかった。

TumblrのURLに日本語が含まれていてそれをうまくデコードできていないみたい。でもこれまでうまくいかないという話は聞かないなと思ってたのでちょっと確認をした。
Windows 10のEdgeだとURLがおかしくなってIFTTTの短縮URLをクリックしてもTumblrのページが表示されないけれど、chromeで同じ短縮URLを開くとTumblrのページが表示された。Edgeだとうまくいかないみたい。

たぶんIFTTTは悪くなくてEdgeの方がだめなんだろうけどこうなってしまうのなら別の手を考えるしかない。といってもそんな大げさのことではなくTumblrを更新したらdlvr.itで自動ツイートするように変更した。

ただdlvr.itの短縮URLに日本語が含まれていても大丈夫なのかはまだ検証していないのでこれでいいのかはまだわからない。



2017年1月28日土曜日

dlvr.itでtwitterに自動投稿してもtwitter cardがうまく表示されなかったのは設定のせいかもしれない

dlvr.itによる投稿でTwitterカードが表示されないことについて


dlvr.itでTwitterに自動投稿したけれどカード表示されなかった。ただ画像だけが表示されて概要が表示されないのだ。

で、いろいろ調べたところdlvr.itの設定にある「Enable Photo Posting」や「Post As Photo」のせいかもしれない。これはデフォルトでオンになっている。
これはたぶん投稿した記事内になる画像を自動で付加してるものみたい。

WordPressで投稿した記事に画像がないときFaviconの画像が表示されるが概要は表示されない。画像があるときはその画像が表示れてやはり概要は表示されない。
どちらもTwitterカードの形式になっていない。

また全く別のブログも書いていてそれもTwitter Cardsに対応させたのだけど、こちらは全体にほぼ画像がない。
このブログの場合、記事に画像がないときはTwitterカードがちゃんと表示される。しかし、記事に画像があるときはその画像が表示されて概要は表示されなずTwitterカードの形式になっていない。

このことからdlvr.itが自動的に投稿した記事から画像を取り出してTwitterで表示させようとしているように見える。そしてこういう形で画像を付加するとTwitterカード形式での表示にならない。

ということでdlvr.itの「Enable Photo Posting」「Post As Photo」の設定のせいでTwitterカード形式で表示されないのではないかということになる。

とりあえず両方の設定をオフにした。これでうまくいくのかはまだ実践していないのでわからない。厳密にどちらの設定の影響なのか調べたいところだけどテスト投稿を頻繁にするわけにもいかないので機会待ちの状態だ。

トラッキングのためのパラメータ付加がTwitterカードに影響するのか


もうひとつdlvr.itがトラッキングのためのパラメータをつけることがTwitterカード形式で表示されることに影響するかもしれないのだけどなんだかすっきりしないでいる。

一方のブログに書いた投稿のURLにトラッキングのためのパラメータがついたものをTwitterの検証ツールで試すとエラーになってしまう。
だけど他方のブログではトラッキングのためのパラメータをURLに付加していてもエラーにならない。

これにはどんな違いがあるのかわからずにいる。とりあえずどちらもトラッキングのためのパラメータを付ける設定にして様子を見ることにする。こちらもまだ実践していないので正確なことは言えない状態だ。

追記:

上記の設定で画像は表示されなくなったがTwitterカードの表示はされなかった。こんどはトラッキングのためのパラメータを付加しない設定で試してみる。
ちなみに過去のIFTTTで投稿されたツイートを改めて見てるとTwitterカードがちゃんと表示されていた。過去のツイートもTwitterカード表示されるんですね。

さらに追記:

Twitterカード形式で表示されない原因が判明。それは
に書いた。


2017年1月23日月曜日

ブログからツイッターへの連携をIFTTTからdlvr.itに変更した

運営してるサイトを更新したらツイッターに更新したことをツイートする、っていうのは今は当たり前のことといえるんでしょうね。でも自動でツイートするとなるといろいろな手段があってどの方式にするか悩みどころ。

ずいぶん前にdlvr.itを使っていたけどIFTTTに切り替えてました。なぜそうしたのか覚えてない。せっかくのこのブログの意味が無いね。

IFTTTから切り替えた理由

で、先日ブログ更新したことの自動投稿をIFTTTからdlvr.itに戻した。理由はGoogle+にも投稿できるから。
ブログ更新情報をGoogle+へ自動投稿するためだけにHootSuiteを使っていた。だけどときどきログインしないと投稿されないときがあったので使うのをやめた。本来の使い方とはちがうからしかたがない。

Google+へ投稿する機能があるサービスは少なく、あっても有料なことが多い。だけど最近ふとdlvr.itを思い出して確認してみたらGoogle+への投稿が普通にできることがわかったので切り替えたというわけ。

IFTTTは面白い仕組みだし有効活用したいんだけど今のところ自分にとっていい使い方が見つかっていない。

dlvr.itの初期設定

基本設定はウィザード形式で簡単に行える。

  1. dlvr.itのアカウントをとる
  2. ブログのFeedのURLを入力する
  3. Twitterアカウントを入力し認証する。
  4. Google+アカウントを入力し認証する。

これだけ。ただTwitter Cardsへの対応するためには少し設定を変える必要があった。

Twitter Cardsに対応するための設定

※2017年1月27日追記:以下の設定に関して書いてることはちょっと違いがあるみたいなので別の投稿(dlvr.itでtwitterに自動投稿してもtwitter cardがうまく表示されなかったのは設定のせいかもしれない)に記述する。

設定を変える前の最初の投稿はTwitter Cardsが認識されなかった。ただTwitter Cards表示用に指定した画像はツイッターの画像添付の形式で表示された。

dlvr.itの短縮URLでは認識されないのかと思って短縮されない設定にしてみたけど変化なし。

そこでTwitter Cardsの検証ツールでTwitterに投稿されたURLを確認してみたところエラーになった。じつはURLにdlvr.itのトラッキング用パラメータがついていてこれがあるとTwitter Cardsに認識されないことがわかった。ということでこのトラッキング用パラメータがつかないように設定を変更した。まだ試していないけどこれで大丈夫のはず。

このトラッキング用パラメータを外すにはFeedやTwitter、Google+の各個別設定のところではなくルート設定から行う。あるFeedからソーシャルサービスへの連携の単位をdlvr.itはルートと表現してる。

dlvr.itアカウントをメールアドレスで取ったかTwitterアカウントで取ったかで違う?

ただこのトラッキング用パラメータの設定があるのはdlvr.itにメールアドレスでアカウントをとった場合で、ツイッターアカウントからこのアカウントをとるとこの設定はないみたい。


その他の設定

Twitter、Google+各投稿の頭に「トピックス更新:」という文字列を付加するようにした。ブログ記事のタイトルだけ投稿されるよりもブログ更新情報であることを明確にするため。
これはルート設定からもできるしTwiiter、Google+ごとの個別設定からもできる。


2017年1月22日日曜日

WordPressで運用している個人サイトをTwitter Cards対応にした

先日、自分が運営してる個人サイトをTwitter Cardsに対応させました。

一度ずいぶん前にTwitter Cardsに対応させようとして調べたらFacebookがどうのこうのとあって面倒そうだったのでやめちゃいました。Facebookのアカウントをとる気がないし。

で、最近ふとやっぱりなんとかならないかなと思ってもう一度調べたら別にFacebookとは関係なく対応できることがわかりました。Facebookの仕組みも使うことができるってだけであったのでした。しかもHTMLのMETAタグを数行追加するだけだし。

とはいえちゃんとやろうとするとやはりそれなりに手間がかかりますね。その記録を書きます。WordPressでの対応のさせ方となります。あと比較的簡単なことであればプラグインなしで対応せたいのでプラグインは使っていません。

Twitter Cardsには数種類あるけど今回は一番シンプルなSummaryにしました。
twitte.com → 開発者 → Learn about discovering and embedding Tweets → Twitter Cards → Learn More about Twitter Cards → Summary Card
によると以下の5行を追加するだけ。

<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@ツイッターユーザー名" />
<meta name="twitter:title" content="タイトル" />
<meta name="twitter:description" content="概要" />
<meta name="twitter:image" content="表示する画像のURL" />

twitter:card

<meta name="twitter:card" content="summary" />
summaryはTwitter Cardsの種類なのでそのまま書くだけ。

twitter:site

<meta name="twitter:site" content="@ツイッターユーザー名" />
ツイッターユーザー名も自分のtwitterのユーザー名を書くだけ。

twitter:title

<meta name="twitter:title" content="タイトル" />
タイトルは記事のタイトルなのでWordpressならget_the_title()を使えばいいんだけどトップページのときはサイトのタイトルにするためにbloginfo('name')にします。
と書いてから気づいだんだけどひょっとしてbloginfo()を使わなくてもget_the_title()でもいいのかな?
if(is_home()) {
 $title = get_bloginfo('name');
} elseif(is_single()) {
 $title = get_the_title($post->ID);
} elseif(ispage()) {
 $title = get_the_title($post->ID);
} else {
 $title = get_bloginf('name');
}
<meta name="twitter:title" content="<?php echo $title; >" />

twitter:description

<meta name="twitter:description" content="概要" />
概要は個人サイト構築時にget_meta_description()というのを作成していたのでそれを利用。Wordpressの本だったか検索して見つけたかどっちだったか忘れましたがそれを自分のサイトに合わせて変更したものを使ってます。
これはdescriptionを記事、固定ページ、カテゴリページ、などにあわせた内容を返す関数をfunction.phpに記述してあります。

そのまま使うだけのつもりだったんですが一言書いた後にYouTubeへのリンクを書いた記事があってそれだとそのURLが表示されてしました。それではまずいだろうとURLを削除する行を一行追加しました。

このURLを削除するってPHPやWordpressの関数にありそうでないんですね。検索しても見つけられませんでした。HTMLのタグを消す関数はあるみたいですが。
で、PHPの置換関数で削除したのですがURLの正規表現を検索するとなかなか複雑。ちゃんと意味を理解してから使いたかったのですが解読するのが面倒だったので自分なりの簡易的な正規表現を使うことにしました。厳密な表現をする必要はないので。

とりあえず
$str = preg_replace('^https?://[\w./?=&%-]+^', '', $str);
こんな感じで。もちろんこの前にstrip_tags()などの処理を行ってます。

if(is_home()) {
 $description = get_bloginfo('description');
} elseif(is_single()) {
 $description = get_meta_description(); /* 自作関数 */
} elseif(is_page()) {
 $description = get_meta_description(); /*自作関数 */
} else {
 $description = get_bloginfo('description');
}
<meta name="twitter:description" content="" />

twitter:image

<meta name="twitter:image" content="表示する画像のURL" />
これも内容にあわせて何を指定するか調整しなければいけません。
個別記事以外はサイトをイメージした画像、例えばロゴとかFaviconとかを表示させます。
個別記事のときがちょっと面倒でアイキャッチ画像があればそれを、なければ記事に貼り付けた最初の画像を、なければサイトのイメージ画像にします。

サイト構築時に「記事の最初の画像」を表示するコードを作ってあったのでそれを使います。これは検索してweb上で見つけたものを使ってます。
get_children()とwp_get_attachment_image_src()を使ってURLを得ています。

if(is_home()) {
 $image = get_template_directory_uri() . '/images/XXXXXXXX.jpg';
} elseif(is_single()) {
 if(has_post_thumbnail()) {
  $image = wp_get_attachment_image_url(get_post_thumnail_id(), 'medium');
 } else {
  $attachments = get_children(
    "post_parent=$post->ID&post_type=attachment&post_mime_type=image");
  $att_images = array_reverse($attachments);
  $att_image  = array_shift($images);
  if($att_image) {
   $image = wp_get_attachment_image_url($att_image->ID, 'medium');
  } else {
   $image = get_templage_directory_uri() . '/images/XXXXXXXX.jpg';
  }
 }
} elseif(is_page()) {
 $image = get_template_directory_uri() . '/images/XXXXXXXX.jpg';
} else {
 $image = get_template_directory_uri() . '/images/XXXXXXXX.jpg';
}
<meta name="twitter:image" content="" />

コードのまとめ

上記のコードで無駄があるように見えると思いますがmetaタグごとに記述したからでこうなったのであって実際にはif文をひとつにまとめて記述しています。
if(is_home()) {
  $title = get_bloginfo('name');
  $description = get_bloginfo('description');
  $image = get_template_directory_url() . '/images/XXXXXXXX.jpg';
} elseif(is_single()) {
 $title = get_the_title($post->ID);
 $description = get_meta_description();
 ...
のように。

このコードをtwittercard.phpとして保存し、header.phpのの間に
<?php get_template_part('twittercard'); ?>
を追加することでTwitter Cardsに対応できました。

Twitterに申請

で、ただ上記のmetaタグを入れただけではだめでTwitterに申請しないといけないらしいので早速実行した。

うまく表示されるか確認することができるページがあるのでそこで確認。
twitte.com → 開発者 → Learn about discovering and embedding Tweets → Twitter Cards → Learn More about Twitter Cards → validator tool (日本語のページなら:検証ツール)

以前はエラーがなければ申請する必要があったらしいけど、現在はこの検証ツールで正常に表示されるだけでOKになる。たぶん申請の数がものすごく多くて承認作業が大変になったからじゃないだろうか。

Twitterに投稿して実際の表示も確認できたのですべての作業はこれで終わりました。




2017年1月15日日曜日

3年ぶりの更新その2 自分のモバイルの現状

久しぶりの更新ということで、現状確認2回目モバイル編。といってたいしたことないけど。

スマートフォン

前まではF-12CとイオンSIMを使っていたけど、今はXPERIA Z SO-02Eとb-mobile おかわりSIMとなっている。
スマートフォンは買い替えた(中古)。SIMはb-mobileの都合でイオンSIMからおかわりSIMへとある意味自動的に変更。正確には申込みが必要だったけど手数料とかはなし。

タブレット

去年、BIGカメラ専売のSG080iBKをアウトレットで購入。Twitterやちょっとホームページ見るのにスマホだと小さいしPC起動するのはなんか大げさだしということで買った。
だけどWindows10のアップデートをしてしばらくしてからタッチパネルが反応しなくなって困ってる。USBポートにキーボードやマウスをつなぐと使えるのでそれで操作してる。

ただ自分の使い方だとタブレットは今ひとつだった。こうしてちょっとしたブログを書くときにも使えたらと思っていたけどそれをやるには画面が少し狭いことやソフトキーボードを使うとなるとちょっとやる気がおきない。

できれば2in1タブレットPCがほしいなと思っている。