Hatena::Groupraru

教えてなでしこ

2010-11-02

[][]LDRの「このフィードを購読しているユーザー」から大量のユーザーを購読する 21:16 はてなブックマーク - LDRの「このフィードを購読しているユーザー」から大量のユーザーを購読する - 教えてなでしこ

任意のフィード詳細ページを開いてjavascriptコンソールから

var x   = document.querySelectorAll('.SubscribersUserID > a');
var tx  = "http://reader.livedoor.com/user/";
var tx2 = "/rss";
var ce = document.createElement("textarea");
for(i=0;i<x.length;i++){
    var a = x[i].firstChild.nodeValue.split("の");
    var b = tx + a[0] + tx2 + "\n";
		ce.value = ce.value+b;
	}

ce.name = "myTEXT";
ce.cols = "100";
ce.rows = "20";
var objBody = document.getElementsByTagName("body").item(0); 
objBody.insertBefore(ce, objBody.childNodes[1]);

このスクリプトを実行すると

f:id:kkk6:20101102210804p:image

こんな風にフィードリストを取得できるので、あとは

結果とは変数

メモ記入
それを反復
	対象をxmlに代入
	対象からHTTPデータ取得して、操作対象に代入
	操作対象からタイトル取得
	それをタイトルに代入
	操作対象からリンク取得
	それをリンクに代入
	「<outline title="{タイトル}" htmlUrl="{リンク}" type="rss" xmlUrl="{xml}" />」&結果を結果に代入	

テンプレートは「
<?xml version="1.0" encoding="utf-8"?>
<opml version="1.0">
<head>
    <title>livedoor Reader Subscriptions</title>
    <dateCreated>Mon, 25 Oct 2010 00:29:26 UTC</dateCreated>
    <ownerName>katu6363</ownerName>
</head>
<body>
{結果}
</body></opml>
」
テンプレートを「{デスクトップ}ldr.xml」に保存。

●タイトル取得(Aから)
	タイトル1は配列
	Aから「/channel/title」の階層タグ切り出し
	それをSJIS変換して、タイトルに代入。
	タイトル[0]が「<title>(*)</title>」にワイルドカード一致
	抽出文字列をタイトル1に代入。
	タイトル1で戻る
●リンク取得(Bから)
	リンクは配列
	Bから「/channel/link」の階層タグ切り出し
	それをSJIS変換して、リンクに代入。
	リンク[0]が「<link>(*)</link>」にワイルドカード一致
	抽出文字列をリンク1に代入。
	リンク1で戻る。
終了。

ローカルでopml化してLDRインポートした。

#やっつけなので、opmlにしている時に母艦には何も表示されない。後で改善するかも。

2010-10-27

[]javascriptクロージャ 08:18 はてなブックマーク - javascriptでクロージャ - 教えてなでしこ

少し勉強したので、復習。

[JavaScript] 猿でもわかるクロージャ超入門 まとめ - DQNEO起業日記

function test() {
	var a = 6;
	return function () {
		alert(a);
	};
}
var t = test();
t();
/ /6 

2010-10-23

[]はてブコメント欄ダイアリーへのリンクを追加するgreasemonkey script 22:26 はてなブックマーク - はてブコメント欄にダイアリーへのリンクを追加するgreasemonkey script - 教えてなでしこ

こんなの作ってみた。

f:id:kkk6:20101023222613p:image

// ==UserScript==
// @name           [d]+
// @namespace      http://raru.g.hatena.ne.jp/kkk6/
// @description    はてブコメント横に発言者のダイアリーへのリンクを追加します
// @include        http://b.hatena.ne.jp/entry/*
// ==/UserScript==
window.onload = function () {
	var durl = 'http://d.hatena.ne.jp/';
	var a = '<a class="h_d" href=\"';
	var a2 = '\">[d]</a>';
	var el = document.querySelectorAll('li[id*="bookmark"] > .hatena-star-star-container');
	var el2 = document.querySelectorAll('a.username');
	for (var i = 0; i < el2.length; i++) {
		var id = el2[i].innerText;
		var list = el[i];
		var li = document.createElement("a");
		li.innerHTML = a + durl + id + a2;
		list.appendChild(li);
	}
}
GM_addStyle('.h_d { color: #7fff00 ; }');

2010-10-03

[]LDRRSS購読時、レート付けを省略するGreasemonkey書いた 01:06 はてなブックマーク - LDRでRSS購読時、レート付けを省略するGreasemonkey書いた - 教えてなでしこ

欠点

  • レート付けができない。

利点

  • 1クリック省略できる。*1

苦労話

javascript超初心者だったので、かなり遠回りをした。始めはwindow.openで登録画面を開いてあれこれしようと思ったのだけど、いろいろ調べてみると別ドメインの子ウインドウセキュリティ的な問題があってjavascriptで操作できないようだ。

また、登録画面のボタンを自動でクリックするというスクリプトなので、イベントハンドラの勉強をした。onLoadって読み込まれた直前、つまりボタンがブラウザ上に描写される前に実行される*2ようなので、少し頭を使って、appendChildで直接javascriptを埋め込む方法に切り替えた。このやり方だと、ページが読み込まれた後に僕の望んだ動作をしてくれた。

使い方

LDRの公式ブックマークレットと併用する。僕はChrome Keyconfigのgo toでブックマークレットを登録している。

// ==UserScript==
// @name           ldr_clickl_bottom
// @namespace      http://raru.g.hatena.ne.jp/kkk6/
// @include        http://reader.livedoor.com/subscribe/*
// ==/UserScript==
var js = document.createElement("script");
js.type = "text/javascript";
js.text = "onLoad =  document.getElementById('submit_button').click()";
document.body.appendChild(js);

*1:後からレート付けするタイプなので、欠点が気にならない。

*2:きっと僕の理解は間違っている。