Sleipnirで便利にMovableTypeへ投稿するスクリプトSleipnirで便利にMovableTypeへ投稿するスクリプト

| トラックバック(1)

昨日書いたMovableTypeのクイック投稿で投稿先ブログを指定出来ないって話だが、いろいろ試して見て解決策がわかった。
クイック投稿専用の小窓では無くダイレクトに標準の投稿画面に行けば投稿先のブログは当然URIから指定できる。
そしてエントリー投稿画面にはデフォルトでbody欄に入れるテキストデータを渡すことも出来た。

両方の問題が解決するならばわざわざ使いにくいクイック投稿の小窓なんか使わずに標準の投稿画面を使って投稿するスクリプトを作ればいい。

ブックマークレット的使用をするのだから当然多くの場合には、どこかのサイトへの引用・言及が主な使い方となる。

この場合に考えられる利用パターンといえば、
  • タイトルとアドレスだけコピー
  • タイトル・アドレスに引用文つき
  • さらに引用元・言及先のサムネイル付き

こんなもんか。

って事で、選択された文章のあるなしをチェックして引用タグをつけるか判断する機能、さらにサムネイルも埋め込む機能がついたSleipnir2UserActionスクリプトを作成した。
作成中に知った事なのだがIEでは入力可能なURI文字数が2083文字までという制限があった。
引用文の量が多いと当然URI文字数がオーバーする可能性がある。
そこで、URIの文字数が2083文字をオーバーした場合にはURI渡しは行わずにクリップボードに全文を入れてアラートを出すようにした。

Sleipnir2の右クリックメニューにExtendedMenuプラグインを使用して「ブログに投稿」というコマンドを追加しテストブログで試しているがとりあえず今のところ問題なく動いている。
もちろん、まだなんかエラーがある可能性はあるけど。

/////////////////////////////////////////////////////////////////////////////
//  PostToMovableType.js  ver 1.01 20070516
//  現在開いているページに言及したエントリーをMovableTypeに投稿する
//  author : S.Kazuya
/////////////////////////////////////////////////////////////////////////////


//  初期設定

  //  投稿CGIのURI
  //    mt.cgiがある場所を指定してください。
  //    例:  MT_URI = 'http://foo.bar/mt/mt.cgi';
  
    MT_URI = 'http://foo.bar/mt/mt.cgi';  

  //  サムネイル取得
  //    SimpleAPIの機能を使って引用元のスクリーンショットを埋め込みます。
  //    この機能をオンにするならtrue、使用しないならfalse
  
    SCREEN_SHOT = true;

  //  ブログID
  //    ひとつのMovable Typeを使って複数のブログを運営している場合に変更してください。
  //    Movable Typeの投稿画面のアドレスに含まれているblog_id=?という数字です。
  
    BLOG_ID = 1;


/////////////////////////////////////////////////////////////////////////////


//  プログラム本体

var objectSleipnirApi = new ActiveXObject("Sleipnir.API");
var activeDocumentIndex = objectSleipnirApi.GetDocumentID(objectSleipnirApi.ActiveIndex);
var _document = objectSleipnirApi.GetDocumentObject(activeDocumentIndex);
var _window = objectSleipnirApi.GetWindowObject(activeDocumentIndex);


// 新規エントリー画面のURI
var PostUri = MT_URI + '?__mode=view&_type=entry&blog_id=' + BLOG_ID; 


function html_entities(str){
  return str.replace(/([<>&])/g, function(m0,m1){ return { '<':'&lt;', '>':'&gt;', '&':'&amp;' }[m1] });
}

if (_document == null)
{
  objectSleipnirApi.MessageBox("documentオブジェクトを作成できません");
}
else
{

  // 引用元文書のタイトル、アドレス、選択テキストを取得
  var quoteTitle = html_entities(_document.title);
  var quoteUri = _window.location.href;
  var quoteText = html_entities(_document.selection.createRange().text);

  var entryText = '';
  
  // スクリーンショット機能がオンならSimpleAPIからサムネイル取得
  if(SCREEN_SHOT){
    entryText += '<img class="thumbnail" src="http://img.simpleapi.net/small/' + quoteUri + '" alt="' + quoteTitle + '" style="float:left&#059; margin:1em&#059;" /><br />\n';
  } 
  
  // 引用元のタイトルとアンカー
  entryText += '<div class="quotetitle"><a href="' + quoteUri + '" target="_blank">' + quoteTitle + '</a></div>\n';

  // 引用元でテキスト選択状態になっていれば引用タグで囲んで追加する
  if (quoteText != ''){
    entryText += '<blockquote>\n\n' + quoteText + '\n\n</blockquote><br style="clear:both&#059;" />';
  }
  

   // 投稿画面URIにエントリー本文を追加したURI
  var Uri = PostUri + '&text=' + encodeURIComponent(entryText);

  // IEのURI文字数制限2083文字を超えているか確認
  if(Uri.length > 2083){
    // 制限オーバーの場合
    
    // 本文無しで新規投稿画面をそのまま開く
    _window.open(PostUri, "_self");

     // エントリー本文をクリップボードに格納
    _window.clipboardData.setData("text",entryText);
    
    // 本文をクリップボードに格納したことを告知するメッセージ
    objectSleipnirApi.MessageBox("URIに格納可能な文字数をオーバーしたのでクリップボードに格納しました。\n貼り付けてお使いください。");
  }
  else{
    // 制限内に納まっている場合、生成されたURIにそのままジャンプする
    _window.open(Uri, "_self");
  } 
  
  //あとかたづけ
  _document = null;
}

//あとかたづけその2
objectSleipnirApi = null;

さっきテストブログで実験中に間違ってこっちのブログに投稿してpingまで飛ばしてしまったのは内緒だ。

2007年5月14日 - ver1.00 公開
2007年5月16日 - ver1.01 実体参照化を忘れてたバグを直した。

ブックマークに追加する

Comments and Trackbacks

このブログ記事について

このページは、Kazuyaが2007年5月14日 14:18に書いたブログ記事です。

ひとつ前のブログ記事は「ダイナミックパブリッシング版ページナビをつけた」です。

次のブログ記事は「ぐーぐるさんめっちゃ俊足」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。