はてなブックマークのみんながつけたタグ名をリストで取得する

import re
import urllib,urllib2

def get_globaltags(trgurl):        
    q = {'url':trgurl}    
    entryinfourl = 'http://b.hatena.ne.jp/entry?%s' % urllib.urlencode(q)
    result=urllib2.urlopen(entryinfourl)
    reg = re.compile(r'<span class="global-tag"><a href=(.+) rel=(.+) class=(.+) title=(.+)>(.+)</a></span>')
    tags = reg.findall(result.read().decode('utf-8'))
    result.close
    gtags=[]
    for t in tags:
        gtags.append(t[4])
    return gtags

選択した文字列でブクログのiTunes本棚を検索するブックマークレット

Chromeで動作確認。

javascript:var d=document;var w=window;var kwd=d.getSelection();alert(kwd);var f='http://booklog.jp/itunes/search?keyword=';var p=encodeURIComponent(kwd)+'&media=software&type=iphone';var u=f+p;var a=function(){w.open(u,'_blank')};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else a();void(0);

iPhoneSafariブックマークレットはこれだと上手くいかない。
参考
https://gist.github.com/961328

Google App EngineでInstapaperのFeedをParseしてはてなに投稿するPythonコード

InstapaperのRSSをGAEでパースしてはてなブックマークにタグ[あとで読む]で投稿する。
はてブの投稿にはWSSE.pyを使う。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = "yadokari23"

import logging
import re
import os

import urllib, urllib2

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext import db

from google.appengine.api import urlfetch
from google.appengine.api import mail
from xml.etree.ElementTree import *

import datetime

from WSSE import *

from google.appengine.api.labs import taskqueue

#はてな情報
HATENA_USERNAME='XXXXXXXX'
HATENA_PWD='XXXXXXXXX'

InstapaperURL='http://www.instapaper.com/rss/XXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX'

class Instpr(db.Model):
    title = db.TextProperty()
    link = db.LinkProperty()
    description = db.TextProperty()
    pubDate = db.TextProperty(required=True)
    task = db.BooleanProperty()
    
class MainHandler(webapp.RequestHandler):
    
    def get(self, mode=""):
        
        if mode=='parse_Instapaper_feed':
            #Instapaperのフィードをパースする
            results = urlfetch.fetch(url=InstapaperURL, method=urlfetch.GET, deadline=10)
            dom = fromstring(results.content)   
            if results.status_code == 200:
                if dom.findall('.//item'):
                    for e in dom.findall('.//item'):
                        q = Instpr.gql("WHERE link = :1", e.findtext('./link'))            
                        Instprrec = q.fetch(1)
                        if Instprrec is None:
                            p = Instpr(title=e.findtext('./title')
                                       ,link=e.findtext('./link')
                                       ,description=e.findtext('./description')
                                       ,pubDate=e.findtext('./pubDate')
                                       ,task=False)
                            p.put()
                            
            #task queue未登録のレコードを1件取り出す。
            Instprrec = Instpr.all().filter('task =', False).get()  
                
            if Instprrec:
                query={'link':Instprrec.link }
                #タスクbookmarkTwFavのインスタンスを作成し、タスクを追加
                bookmark_task  = taskqueue.Queue('hatebu')
                next_task = taskqueue.Task(url='/_hatebu', params=query)
                bookmark_task.add(next_task)
                
                Instprrec.task = True
                db.put(Instprrec)
                            
    def post(self, mode=""):
        
        if mode=='_hatebu':
            #はてブする
            url = self.request.get("link")
            #WSSE認証
            hbc = HatenaBookmarkClient(HATENA_USERNAME,HATENA_PWD)
            hbc.getServiceURI() # サービスエンドポイントの取得(PostURIとFeedURI)
            if url <> '':
                hbcomment = u'[あとで読む]'
                hbc.postBookmark(url, hbcomment) # ブックマークの登録
                
def main():
    #URLによってリクエストハンドラを切り替える
    application = webapp.WSGIApplication([('/(.*)', MainHandler)],
                                         debug=True)
    util.run_wsgi_app(application)


if __name__ == '__main__':
    main()

Togetterでまとめたツイート全部に同じ色とサイズを一発で設定するBookmarklet

Togetterのデコレーションは一個一個ツイートごとに色とサイズを設定する機能しか今のところなく、
一度マリノス戦の実況まとめのときにチームカラーに大量のツイートを染める作業にチャレンジしたものの
当然ながら手動ループになってしまうので、とんでもなくデコレーションするのがメンドクサかったんですね。
でもデコレーションした方が見た目もよくなる。
ということで、一括で色とサイズを設定するブックマークレットを作ってみました。


私みたいに大量のツイートのまとめ(もはやまとめとはいえない量)も少数派だと思うので、あんまりコレを欲してる人もいないとは思うけども..
良かったらどうぞ。

↓コピペ用

javascript:$('.tweet').each(function(){var html=$(this).html();var html = html.replace(/<SPAN[^>]*>|<\/SPAN[^>]*>/ig,'');$(this).html(html);var node = document.createElement("span");node.className = $("input[name=font_size]:checked").val()+" "+$("input[name=font_color]:checked").val();node.innerHTML = $(this).html(); $(this).html(node);});

コレをコピペしてブラウザにブックマークレットとして登録。
動作はChromeのみで確認。
デコレーション編集画面(http://togetter.com/deco/XXXXXのページ)でクリックすると、
一括でデコレーションが適用されます。


↓ソース(読みやすくしたもの。Bookmarklet Builderだとうまくformatしてくれないので貼っとく。)

javascript:
$('.tweet').each(function(){
      var html=$(this).html();
      var html = html.replace(/<SPAN[^>]*>|<\/SPAN[^>]*>/ig,'');
      $(this).html(html);var node = document.createElement("span");
      node.className =$("input[name=font_size]:checked").val()+
                ""+$("input[name=font_color]:checked").val();
      node.innerHTML = $(this).html(); $(this).html(node);
}
);