はてなキーワード: text/xmlとは
数日前に puppeteer で自動で PDF にする試みを書いたブログがホッテントリに入ってるのを見た
bg.js
const username = "" const api_key = "" chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { if(message.bookmark){ bookmark(message.bookmark) } }) async function bookmark(url){ fetch("http://b.hatena.ne.jp/atom/post", { method: "POST", referrer: "no-referrer", headers: { Accept: "application/x.atom+xml, application/xml, text/xml, */*", "X-WSSE": await createCredential(), }, body: ` <entry xmlns="http://purl.org/atom/ns#"> <link rel="related" type="text/html" href="${url}" /> </entry> `.replace(/\t/g, ""), }).then(e => {console.log(e)}) } async function createCredential(){ const non = Math.random().toString(36).substr(2) const now = new Date().toISOString() const buf = new TextEncoder().encode(non + now + api_key) const u8a = new Uint8Array(await crypto.subtle.digest("SHA-1", buf)) const str = Array.from(u8a, e => String.fromCharCode(e)).join("") const b64 = btoa(str) return `UsernameToken Username="${username}", PasswordDigest="${b64}", Nonce="${btoa(non)}", Created="${now}"` }
username と api_key を埋めてバックグラウンドで動かす
page.js
chrome.runtime.sendMessage({ bookmark: location.href })
ページ内で動かすコード
普通に出来るよ?
下のURLでOK。
http://feedly.com/index.html#subscription/feed/http://staff.hatenablog.com/rss
適当なRSSページで実行すれば登録してくれるブックマークレット:
javascript:void(d=document);void(el=d.getElementsByTagName('link'));void(g=false);for(i=0;i<el.length;i++){if(el[i].getAttribute('rel').indexOf('alternate')!=-1){ty=el[i].getAttribute('type');if(ty.indexOf('application/rss+xml')!=-1||ty.indexOf('text/xml')!=-1){g=true;h=el[i].getAttribute('href');break;}}};if(g){void(location.href='http://cloud.feedly.com/#subscription'+encodeURIComponent('/feed/')+encodeURIComponent(h));};if(!g){window.alert('Could%20not%20find%20the%20RSS%20Feed');};</p>
例えば「 はてなキーワードが嫌いになった理由 - 将来が不安」とか、最近、はてなキーワードがだめとか何とか、そういう話題がかまびすしかったわけですが、いやいや、今更言うのもなんですが、はてなキーワードはすごいんですよ?
キーワードページからそのキーワードを含む日記が解る。こういう機能、なかなか無いです。
でも、そのキーワードを使っているはてな以外の日記も見たい時があるかもしれません。
テクノラティなら、はてなに限らず、色々なブログサービスの、そのキーワードを含む記事を探すことができます。
でも、日記のキーワードリンクからダイレクトに飛べないと、いちいち見る気になりません。なので、そういうGreasemonkeyスクリプトを書いてみました。はてダの記事中のキーワードリンクの、リンク先をテクノラティにします。
// ==UserScript== // @name Keyword to Technorati // @namespace http://anond.hatelabo.jp/ // @include http://d.hatena.ne.jp/* // ==/UserScript== var keywords = document.getElementsByClassName("keyword"); for(var i=0; i<keywords.length; i++){ keywords.item(i).href = "http://www.technorati.jp/search/" + keywords.item(i).textContent; }
でも、これもちょっと不便です。キーワードリンクで、そのキーワードの意味を知りたい時もあるからです。
はてなキーワードの素晴らしいところは、キーワードを含む日記とキーワードの意味、どちらも一つのページで確認できる事です!まぁキーワードの説明とWikipedia、どっちか片方でも良いような気もしますがf(^ ^;)
そこで、テクノラティのキーワード検索結果ページにも、そのキーワードの意味が表示されれば便利です。
(余談ですけど、Wikipediaの記事があるなら、Wikipediaの記事だけ表示すれば十分かなぁとか思っちゃったり?概してWikipediaの記述の方が優れてるし…)
// ==UserScript== // @name Technorati with Wikipedia or ?keyword // @namespace http://anond.hatelabo.jp/ // @description Add Wikipedia in Technorati search page // @include http://www.technorati.jp/search/* // ==/UserScript== var keyword = (decodeURIComponent(document.URL).split("?")[0]+" ").slice("http://www.technorati.jp/search/".length, -1); function appendKeyword(title,body,url){ var div = document.createElement("div"); div.style.border = "inset gray thin"; div.style.padding = "5px 14px"; var h2 = document.createElement("h2"); h2.innerHTML = title.link(url); h2.style.fontSize = "2em"; div.appendChild(h2); var content = document.createElement("div"); content.innerHTML = body; div.appendChild(content); div.appendChild(document.createElement("hr")); var foot = document.createElement("div"); foot.innerHTML = "["+decodeURIComponent(url).link(url)+"]"; foot.style.textAlign = "right"; div.appendChild(foot); //document.getElementById("main").insertBefore(div, document.getElementById("main").firstChild); document.getElementById("extra").insertBefore(div, document.getElementById("extra").firstChild); } GM_xmlhttpRequest({ method: "GET", url: "http://wikipedia.simpleapi.net/api?output=json&keyword="+keyword, onload: function(response){ var wp = eval(response.responseText); if(wp){ appendKeyword(wp[0].title, wp[0].body, "http://ja.wikipedia.org/wiki/"+encodeURIComponent(wp[0].title)); }else{ GM_xmlhttpRequest({ method: "GET", url: "http://d.hatena.ne.jp/keyword?mode=rss&ie=utf8&word="+encodeURIComponent(keyword), onload: function(response){ var hk = (new DOMParser).parseFromString(response.responseText, "text/xml"); appendKeyword(keyword, hk.getElementsByTagName("description").item(1).textContent, "http://d.hatena.ne.jp/keyword/"+keyword ); } }); } } });
これで、はてダのキーワードリンクで飛んだ先に、その単語の説明とはてな以外も含めたブログ記事が表示されます。やったね\(^o^)/
追記
用語の説明は、検索結果の上に表示するより、サイドバー(広告が表示されてる)にあった方が便利かなーとか思ったので、コードをちょぴっと変更しました。既にインスコしちゃってた人、ごめんね!
ところでテクノラティ検索結果のAutopagerize、なんか1頁目ばっかり継ぎ足される気がするけど、ボクだけかな?