Archive

Posts Tagged ‘greasemonkey’

TalkLineにPostするためのLDR用GreasemonkeyScript

4月 20th, 2009

TalkLineという自作マイクロブログにLDRからPostするためのGreasemonkeyScript

JAVASCRIPT:
  1. // ==UserScript==
  2. // @name           TalkLineForm
  3. // @namespace      http://yusukezzz.dyndns.org/
  4. // @description    TalkLine post form for Livedoor Reader
  5. // @include        http://reader.livedoor.com/*
  6. // ==/UserScript==
  7.  
  8. (function(){
  9.     var w = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow;
  10.     var description = 'TalkLine post form for Livedoor Reader';
  11.     $client = 'TalkLineForm for LDR';
  12.  
  13.     w.myfunc = function(url, title){
  14.         $status = document.getElementById('status_' + url);
  15.         window.setTimeout(function(){
  16.             GM_xmlhttpRequest({
  17.                 method: 'POST',
  18.                 headers: {'Content-type': 'application/x-www-form-urlencoded'},
  19.                 url: 'http://133.78.124.70/post/',
  20.                 data: 'status=' + encodeURIComponent($status.value) + '&title=' + encodeURIComponent(title) + '&url=' + encodeURIComponent(url) + '&client=' + $client,
  21.                 onload: function(responseDetails) {
  22.                     if(responseDetails.responseText != 'success') alert('Failed');
  23.                     else $status.value = '';
  24.                 }
  25.             });
  26.         }, 0);
  27.     }
  28.    
  29.     w.entry_widgets.add('talkline_form', function(feed, item){
  30.         var url = item.link.replace(/#/g,'%23');
  31.         var title = item.title
  32.         return [
  33.             '<img src="http://133.78.124.70/favicon.ico">',
  34.             '<input type="text" id="status_', url ,'" value=""/>',
  35.             '<input type="submit" id="btn_', url ,'" value="post" onclick="myfunc(\'', url,'\',\'', title ,'\')"/>',
  36.         ].join('');
  37.     }, description);
  38. })();

LDRで用意されてるくっつける用のメソッドでinputを用意し、GM_xmlhttpRequestでpostしています
GM_xmlhttpRequestでPOSTメソッドを使うには
headers: {'Content-type': 'application/x-www-form-urlencoded'}
が必要です
また、Railsならば受け取るアクションでXSS対策のトークンチェックを無効化、又は対応させる必要があります
(この辺のセキュリティ対策は正直良く分かってません)

GM_xmlhttpRequestをwindow.setTimeoutでラップしてあるのはセキュリティ上の配慮のようです
詳細は良く分かりません><

キーボードショートカットや投稿されてるpostを表示させたり、まだまだ弄る余地はいくらでもありますが、
とりあえずこれでLDRからPost出来るようになったので、後はLDRだけに留まらず、通常サイトからのpost&twitterへのクロスポストに対応させたいと思います

,

ActionController::InvalidAuthenticityToken

4月 16th, 2009

Railsでformメソッドを使わずにPOSTなど、GET以外でデータを送信すると

ActionController::InvalidAuthenticityToken

というエラー(HTTPステータスコード422)が返されることがあります

これはRails標準のCSRF対策で、GET以外のデータ受信時にサーバ側で生成されるトークンが要求されるために起こります
formメソッドを使えば自動的にトークンを生成して埋め込んでくれますので普通は遭遇しないのですが…

今回自分はGreasemonkeyScriptからxmlhttpRequestでPOSTして嵌りました
今回は外部から利用してもらうこと(APIのつもり)が前提なのでそのメソッドだけ

skip_before_filter :verify_authenticity_token ,:only=>[:action_name]

をコントローラに書いてトークンチェックを無効化しました
セキュリティ的にはどうなんでしょうかね…?
RailsでAPIがどのように作られているのか勉強したいです;

参考
【 Ruby on Rails Pro 】 POST送信でInvalidAuthenticityTokenエラー

,

GreasemonkeyScript作るのに参考にしたサイト

4月 13th, 2009

ChromeでGreaseMonkey

1月 15th, 2009

開発版のver2.0系からGMスクリプトの一部が(比較的簡単に)動かせるとのことなので試してみました

参考:公式Google Chromeがグリモン対応したので試してみた

結果、
autopagerize.user.js
ldr_ad-entry_blocker.user.js
ldr_full_feed.user.js
ldrize.user.js
minibuffer.user.js
utilities_for_livedoor_r.user.js
を普段使っているのですが、ldr_ad-entry_blocker.user.js以外は全部駄目でした\(^o^)/

駄目もとでOpera向けのoAutoPagerize(.user).jsを入れてみたら動きました
ちゃんとuser.jsとしないといけないようです
それにしてもLDR系の奴が一切動かないというのは厳しいですねー
動いたらFirefoxでニコ動垂れ流してChromeでLDRとか考えてたんですが;
残念

,