2008/03/10


追記
都合上、キーを「g」から「z」に変更させて頂いています。
以下読み替えて頂く様お願い致します。

まぁ、お約束って事で。
しかしまぁLDRで全文取得表示するグリモン便利だなぁ。
OperaでLDR Full Feed - 0x集積蔵

id:Constellation さん作の、LDR Full Feed - Userscripts.orgをOperaに移植してみた。
移植早ぇぇぇぇぇ!!!

って事で、os0xさんのOpera版をベースにGoogle Reader版を作ってみました。
そんなに大きな変更してません。要はos0xさんのを参考に昨日のグリモンをOperaに対応させただけ。

またまた操作は同じく、[G]のアイコンが付いてたら「g」を押下で全文取得。
とりあえず、dankogai氏のサイトでチェックして問題なさげ。(またか!)

ライセンスはLDR Full Feedに委ねます。さらにOpera固有部に関してはos0xさんのLDR Full Feed Operaに委ねます。

ダウンロード:googlereaderfullfeed.js

追記
2008/02/28
Posted at by




結構難しかった...
オリジナル作者はLDRizeやMinibufferを作られたsnj14さん。
初めてminibufferbookmarkcommandを使った時は「スゲー」と感動しました。その後ソースがCodeReposで管理される用になりプラガブルな仕組みに修正させて頂き、gooブックマークや、niftyクリップ、pookmark等のプラグインも動くようになりました。
ただFirefoxでは動くけど、Operaでは動かなかった。
Firefoxだけでしか使えないってのが擬かしい程、使い勝手はめちゃめちゃ良くて
「minibufferBookmarkcommandのボタン一発ブックマークが気軽すぎてタグ付けとかしなくなる」
とおっしゃる方もいる位。ポップアップも出ないし別画面に飛ばされる訳でもないから、記事を読んでる最中に「ぶくま!」と思ったら「b」一発。
タグやコメントが打ちたくなったら「B」。常用しだすと手放せなくなります。
で、この快感をOperaユーザにも伝えたい。そう思いました。
Operaでは通常の作りをしていてはドメインを越えた通信(JSON以外)は出来ないのですが、postMessageというAPIを使うことでコンテンツ間のメッセージングが行えるようになります。
これを使用して、GM_xmlhttpRequestもどきを実装しています。ただし困ったのがこのpostMessageに送り出す文字列(HTML)を取得する為にはオブジェクトをメインコンテンツに追加する必要がありかつ追加するという事はGET限定、つまりPOSTを実行させる為にはドメインを越えられる別のPOST実装が必要になるって事に。
で、結局やったのが動的にiframeを生成して、その中にformを作りポストするという方法。
いろいろやっている内に、DOM追加で動くGET版とiframeを使うPOST版を纏めたGM_xmlhttpRequestみたいな物がなんとなく出来上がりました。
(完全ではありません)

これで行ける!と思ったのですが今度はdel.icio.usのタグを取得する方法で困った。このpostMessageに送り出すにはDOMContentLoadedをフックするのだけれど、del.icio.usのAPIからXML形式のタグ一覧を読み込んだ時にはDOMContentLoadedが走らない。
悩んだ挙句、一度「http://del.icio.us/」にアクセスし、ユーザ名称を見つけ、「http://feeds.delicious.com/feeds/json/tags/XXXX」にアクセスし、JSONを取得するという方法で実装しました。
ようやく
が使えるminibufferbookmarkcommandが出来上がりました。ふぅ
Operaユーザの方で、SBMをお使いの方は一度試して見て下さい。
minibufferbookmarkcommand.js
なお作成にあたっては、Opera版のLDR Full Feedを作成されたos0xさんのコードをふんだんに参考にさせて頂いております。感謝。
Posted at by



2008/02/26


まぁ、ぶっちゃけ(なくても)「はてブちゃんねる」のパクリなんですが...
単純にwith_friendsのRSSをGoogle Ajax Feed API使ってパースしてるだけです。
コードはこんな感じ。
<script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAAS_2fKEdj-fsDOrnYqd4nthQCjALL2TOLFFIzEhjgebS4V6SjnhTxtlSoL0NJ-Fa6B7tsqLuiiPI9Pg"></script>
<style type="text/css">
.twitter-2ch {
    background-color: #efefef;
    width: 400px;
    color: #000000;
    font-family: 'MS PGothic',sans-serif;
    padding: 1.0em;
}
#twitter_2ch_container a:visited {
    color: #660099;
}
#twitter_2ch_container a:active {
    color: #ff0000;
}
.twitter-2ch-title {
    color: red;
}
</style>
<script type="text/javascript"><!--
function twitter_2ch() {
  var container = document.getElementById("twitter_2ch_container");
  container.innerHTML = "";
  var img = document.createElement('img');
  img.src='http://mattn.kaoriya.net/images/ajax-loader.gif';
  container.appendChild(img);

  var twitterId = document.getElementById("twitterId").value;
  var feed = new google.feeds.Feed('http://twitter.com/statuses/friends_timeline/' + twitterId + '.rss');
  feed.setNumEntries(10);
  setTimeout(function() {
    feed.load(function(result) {
      if (!result.error) {
        var html = "";
        for (var i = 0; i < result.feed.entries.length; i++) {
          var entry = result.feed.entries[i];
          var link = entry["link"];
          var pubDate = new Date(entry["publishedDate"]).toLocaleString();
          var content = entry["content"];
          var author = content.replace(/:.+$/, '');
          var status = content.replace(/^[^:]+: /, '');
        html += (i+1) + ':<a href="' + link + '">以下、名無しにかわりましてfollowerがお送りします。</a>:' + pubDate + ' ID:' + author + '<br />';
        html += '<blockquote>' + status + '</blockquote>';
        }
        container.innerHTML = html;
      }
    });
  }, 100);
}
google.load("feeds", "1");
--></script>
<div class="twitter-2ch">
<span class="twitter-2ch-title">今何してる?</span>
twitter id:<input type="text" id="twitterId" value="mattn_jp"/>
<input type="button" onclick="twitter_2ch();" value="twitter→2ch"/><br />
<br />
<div id="twitter_2ch_container"></div>
</div>
で、実行画面は以下の通り

続きを読む...

Posted at by