PostToTwitterプラグイン

はじめに

エントリーのタイトルとパーマリンクの短縮URLをTwitterに投稿するプラグインです。

動作条件

本プラグインはMovableType 4.0以上で動作します。

注意:ブログクライアントからエントリーを投稿した場合、ブログの設定やブログクライアントの実装によっては、正常に動作しないことがあります。「トラブルシューティング」で紹介する方法で回避出来る場合もあります。

インストール

本パッケージに含まれる「plugins」ディレクトリ内の「PostToTwitter」ディレクトリを、Movable Typeインストールディレクトリの「plugins」ディレクトリの下にコピーしてください。

インストール後、以下のような構成になります。

  

    mt (Movable Typeインストールディレクトリ)
    `-- plugins
        `-- PostToTwitter
            |-- lib
            |   `-- PostToTwitter
            |       |-- L10N
            |       |   |-- en_us.pm
            |       |   `-- ja.pm
            |       `-- L10N.pm
            |-- post_to_twitter.pl
            `-- tmpl
                |-- blog_config.tmpl
                `-- message_format.tmpl

作業後、Movable Typeのシステム・メニューのプラグイン管理画面を表示し、プラグインの一覧に「PostToTwitter」が表示されていることを確認してください。これで設置完了です。

使い方

初めにTwitterのユーザ名、パスワードを設定します。あとは普通にエントリーを投稿するだけです。

  1. 各ブログごとのプラグイン設定画面(注意:システムメニューのプラグイン設定画面ではありません)で PostToTwitter の設定を表示し、
  2. ユーザ名、パスワードを入力し、
  3. 「変更を保存」ボタンを押します。
  4. あとはエントリーを編集し、保存するだけです。保存後、エントリー編集画面上部に投稿の成否が表示されますので、失敗の場合はログで原因を確認します。

    成功時の表示

    失敗時の表示

  5. 一度でも保存されたことのあるエントリーは、Twitterへ投稿するメッセージの内容をエントリー編集画面左下部で確認(プレビュー)することが出来ます。確認時に表示される短縮URLはダミーですが、Twitterへ投稿する前に実際のURLに置換えられます。なお、新規作成時にはメッセージの内容を確認することができませんので、内容を確認しながら作業したい場合は、エントリの状態を未公開として保存してください。
  6. Twitterへの投稿に失敗した場合、エントリー編集画面左下部の再投稿ボタンで再度投稿することが可能です。

オプション設定

エントリーの投稿

初期設定では、エントリーを編集し保存する度にTwitterへ投稿しますが、これをエントリーの状態を未公開(下書き)から公開に変更し、保存した場合にのみ投稿するように変更できます。

  1. 「エントリーの投稿」設定にチェックを付け、
  2. 「変更を保存」ボタンを押します。

URL短縮サービス

Twitterへ投稿する際、該当するエントリーのパーマリンクを短縮するサービスを選択することができます。

  1. URL短縮サービスを選択します。初期設定では「TinyURL」が選択されています。
  2. 「bit.ly」を選択した場合、bit.ly APIログイン名/APIキーを指定します。
  3. 「変更を保存」ボタンを押します。

フォーマットテンプレート名

Twitterへ投稿するメッセージのフォーマットを定義したテンプレートモジュールの名前を指定することができます。

デフォルトでは「PostToTwitter Message Format」という名前が設定されています。ここで指定したテンプレートモジュールをブログテンプレート、グローバルテンプレートの順に検索し、最初に見つかったものを使用します。

指定したテンプレートモジュールが見つからない場合、プラグインと一緒にインストールされる「message_format.tmpl」という名前のテンプレート・ファイルを使用します。

  1. 「フォーマットテンプレート名」を変更し、
  2. 「変更を保存」ボタンを押します。

テンプレートタグ

PostToTwitterでは、メッセージフォーマットを定義するテンプレートモジュール内でのみ以下のタグが使用出来ます。

MTEntryShortenedPermalink
エントリのパーマリンクを、プラグイン設定で指定された短縮URLサービスを使用し変換した短縮URLを表示します。MTEntryPermalinkタグと同じモディファイアが使用出来ます。 プレビューで使用された場合はダミーのURL(例、http://tinyurl.com/xxxxxx)を出力し、短縮URLサービスへアクセスしません。

メッセージフォーマットの定義

テンプレートモジュールを作成することで、Twitterへ投稿するメッセージのフォーマットを自由に定義できます。例えば、ブログ名やユーザ名を表示したり、カスタムフィールドに入力されたデータを表示したり、データの順序、数値のフォーマットを変更したりすることが可能になります。

メッセージフォーマットを定義する際には、メッセージの長さに注意してください。Twitterが受け付けるメッセージは140文字までですので、それを越える場合にはプラグインによって超過分が切り捨てられてしまいます。

例えば、デフォルトのメッセージフォーマットは、「エントリタイトル - 短縮されたパーマリンク」という形式で定義されていますが、これをテンプレートモジュールで表すと、

<MTEntryTitle> - <MTEntryShortenedPermalink>

となります。(メッセージフォーマットを定義したテンプレートモジュールの中は、MTEntriesブロックタグのコンテキストとなりますので、エントリの関連タグを直接記述できます。)

ところが、もし、エントリのタイトルが130文字、短縮URLが25文字であった場合、全体としては140文字を越えてしまうため、パーマリンクの部分が途中で切られてしまいます。これではTwitterへの投稿見てユーザが興味を持ってくれたとしても、肝心のエントリにたどり着くことができないということにります。

このようなことを避けるには、メッセージの中身を切り捨てられては困る部分と、切り捨てられても良い部分に分け、切り捨てられても良い部分の長さを調節し、全体で140文字を越えないようにします。これをテンプレートモジュールで実現するには、どのようのすれば良いのか、先ほどのデフォルトテンプレートの例で説明します。

メッセージの前半、エントリタイトルの部分を切り捨てられても良い部分とし、後半の短縮されたパーマリンクの部分を切り捨て不可の部分とすると、テンプレートモジュールは次のように記述することができます。

<mt:setvar name="title_len" value="140" />
<mt:setvarblock name="title"><mt:entrytitle /></mt:setvarblock>
<mt:setvarblock name="link"> - <mt:entryshortenedpermalink /></mt:setvarblock>
<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" /></mt:setvarblock>
<mt:setvar name="title_len" op="-" value="$link_len" />
<mt:var name="title" trim_to="$title_len" /><mt:var name="link" />  

最初の行から順に見て行きますと、

  1. 変数title_lenはエントリタイトル部分の長さを表し、初期値としてメッセージの最大長140文字を設定します。
  2. 変数titleはエントリタイトルを格納します。これが切り捨てられてもよい部分になります。
  3. 変数linkは短縮されたパーマリンクとエントリタイトルとの区切り文字としてハイフン(と前後の空白)を格納します。これが切り捨てられては困る部分になります。
  4. 変数link_lenは変数linkの文字数を格納します。count_characterモディファイアはタグが出力する文字数を数え表示します。
  5. 変数title_lenから変数link_lenを引き、その結果を再度変数title_lenに格納します。これがエントリタイトルとして表示可能な最大文字数となり、これを越える分については切り捨てられるということになります。
  6. 変数titleの内容をtrim_toモディファイアを使って先頭から変数title_lenの長さ分だけ表示し、さらに変数linkの内容を表示します。

となり、短縮されたパーマリンクが切り捨てられない、メッセージフォーマットを実現しています。

ブログ名入りのメッセージフォーマット

簡単なカスタマイズの例として、デフォルトのメッセージフォーマットにブログ名を入れ、「[ブログ名] エントリタイトル - 短縮されたパーマリンク」という形式にしてみます。

<mt:setvar name="title_len" value="140" />
<mt:setvarblock name="title">[<mt:blogname />] <mt:entrytitle /></mt:setvarblock>
<mt:setvarblock name="link"> - <mt:entryshortenedpermalink /></mt:setvarblock>
<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" /></mt:setvarblock>
<mt:setvar name="title_len" op="-" value="$link_len" />
<mt:var name="title" trim_to="$title_len" /><mt:var name="link" />  

2行目の変数titleに大括弧([])で括ったブログ名を追加しています。この変数に格納した文字列は後半が切り捨てられる可能性がありますので、ブログ名の長さによってはエントリタイトルが短くなるだけでなく、ブログ名自体も切り捨てられる場合もあります。

ハッシュタグ入りメッセージフォーマット

次の例として、切り捨てられては困る部分に、エントリに設定したタグをTwitterのハッシュタグとして入れ、「エントリタイトル #hashtag - 短縮されたパーマリンク」という形式にしてみます。

<mt:setvar name="title_len" value="140" />
<mt:setvarblock name="title"><mt:entrytitle /></mt:setvarblock>
<mt:setvarblock name="hashtag"><mt:entrytags>#<mt:tagname> </mt:entrytags></mt:setvarblock>
<mt:setvarblock name="link"> <mt:var name="hashtag"> - <mt:entryshortenedpermalink /></mt:setvarblock>
<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" /></mt:setvarblock>
<mt:setvar name="title_len" op="-" value="$link_len" />
<mt:var name="title" trim_to="$title_len" /><mt:var name="link" />  

3行目で変数hashtagとして、エントリタグの先頭に#(ハッシュマーク)を付け、空白でつないだ文字列を格納しています。 4行目で変数hashtagを変数linkに格納し、切り捨てられないようにしています。

ハッシュタグを入れる方法としては他にも、エントリキーワードを利用するとか、専用のカスタムフィールドを用意するなどが考えられますので、状況に合わせて使いやすい方法を試してみてください。

トラブルシューティング

ectoから投稿すると、異なるURLが連続投稿されてしまう

現象
ectoからエントリーを投稿すると、Twitterに連続して2つのエントリーが投稿され、1つ目に投稿されるエントリーには正しくないURLが含まれてしまう。
原因

ブログ設定でパーマリンクがカテゴリーを含むように設定されている状況で、ectoからエントリーを投稿すると発生します。現象が発生するとき、ectoとMovableTypeとの間では次のようなXML-RPCのやり取りが行われています。

  1. newPostメソッドでエントリーを作成するが、公開(パブリッシュ)しない。
  2. setPostCategoriesメソッドでエントリーにカテゴリーを設定する。
  3. editPostメソッドでエントリーを公開(パブリッシュ)する。

プラグインでは、「公開(パブリッシュ)する/しない」という情報を取得出来ないため、1.および3.の時点でTwitterへ投稿します。1.の時点ではまだエントリーに対してカテゴリーが設定されていないため、カテゴリーを含まないパーマリンクを短縮URLにして投稿します。3.の時点では既にカテゴリーが設定されていますので、カテゴリーを含んだパーマリンクを短縮URLにして投稿します。その結果、異なるURLを持つ2つのエントリーとしてTwitterへ現れてしまいます。

なお、パーマリンクにカテゴリーを含まず、日付を使用している場合には、この問題は発生しません。上記1.および3.の時点でTwitterへ2度投稿することに変わりありませんが、同一の内容を連続投稿してもTwitter側では無視されるようです。

回避策
次の手順に従って、newPostメソッドでTwitterへ投稿しないように設定します。
  1. 各ブログごとのプラグイン設定画面(注意:システムメニューのプラグイン設定画面ではありません)で PostToTwitter の設定を表示し、
  2. 「エントリーの投稿」からチェックを外し、「実験的なオプション:XML-RPC newPostメソッドを無視します。」にチェックを付けます。
  3. 「変更を保存」ボタンを押します。

ブログクライアントから投稿すると正しいURLが表示されない

現象
ブログクライアント(BlogWrit, ubicast Blogger等)からエントリーを投稿すると、Twitterに正しいURLが表示されない。
原因

ブログ設定でパーマリンクがカテゴリーを含むように設定されている状況で、ブログクライアントの実装によって発生する場合があります。現象が発生する時、ブログクライアントとMovableTypeとの間では次のようなXML-RPCのやり取りが行われています。

  1. newPostメソッドでエントリーを作成し、公開(パブリッシュ)する。
  2. setPostCategoriesメソッドでエントリーにカテゴリーを設定する。
  3. publishPostメソッドでエントリーを公開(パブリッシュ)する。

プラグインは、1.の時点でTwitterへ投稿しますが、まだエントリーに対してカテゴリーが設定されていないため、カテゴリーを含まないパーマリンクを短縮URLにして投稿します。その後、2.および3.のメソッドが実行されたことをプラグイン側で知ることができないため、正しいURLをTwitterに投稿することができません。

なお、パーマリンクにカテゴリーを含まず、日付を使用している場合には、この問題は発生しません。上記1.および3.の時点でTwitterへ2度投稿することに変わりありませんが、同一の内容を連続投稿してもTwitter側では無視されるようです。

回避策
ectoから投稿すると、異なるURLが連続投稿されてしまう」の手順に従って、newPostメソッドでTwitterへ投稿しないように設定しておき、ブログクライアントから新規に投稿した後、再度同じエントリーを編集、保存する、という手順と踏む以外に今のところ回避方法がありません。

更新履歴

このプラグインの利用、及び著作権や保証について

このプラグインの著作権はM-Logic, Inc.が所有しています。著作権者の許可なく本プラグインを使用、改変、再配布することはできません。

連絡先

作者:M-Logic, Inc.