2008/11/22

サイドバーにTwitterのタイムラインを表示するtwitgadetというガジェットのがあるんですが、返信タイムラインを取得する機能があるのに呼び出すのを忘れているというバグ?実装漏れ?をみつけたのでfixしてみます。

C:\Users\<UserName>\AppData\Local\Microsoft\Windows Sidebar\Gadgets\twigadge-1.1[1].gadget\js\twigadge.js

とりあえず現状では返信タイムラインが呼ばれないのは間違いないです。とりあえず返信タイムラインを呼ぶようにfix。367行目あたり

      Twigadge.getFriendsTimeline();

     Twigadge.getReply();

に変更。

533行目あたり。

          Twigadge.refreshTL(); //

          Twigadge.getFriendsTimeline(); //

に変更。

C:\Users\<UserName>\AppData\Local\Microsoft\Windows Sidebar\Gadgets\twigadge-1.1[1].gadget\js\gadget.js

90行目あたり

        Twigadge.getReply();

の下に次の行追加

        Twigadge.refreshTL();

これでとりあえず返信タイムラインは取得できます。

ダイレクトメッセージも設定に関係なく最初の一回しか呼ばれないっぽいです。
これを直すには

C:\Users\<UserName>\AppData\Local\Microsoft\Windows Sidebar\Gadgets\twigadge-1.1[1].gadget\js\twigadge.js

658行目あたり

      case MODES.system:
        Twigadge.refreshTL();
        break;
      case MODES.dm:
        Twigadge.refreshDM();
        break;
 

      case MODES.system:
        Twigadge.refreshTL();
        Twigadge.refreshDM();
        break;
      case MODES.dm:
        break;

とします。

これで作者さんの意図どおりかわかりませんが、とりあえず説明書通りには動きます、たぶん。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2008/11/22/161950.aspx

2008/03/17

IronPythonもちょっとやろうと思いまして、荒井さんのIronPythonの世界などを読みつつ研究。 Python2.5ではファイルのダウンロードは組み込みライブラリのurllibを使うのが定番みたいです。

#!/usr/bin/python

import urllib

url = 'http://img.yahoo.co.jp/images/main7.gif'
dest = 'D:\\script\\test.gif'
file = urllib.urlopen(url).read()

try :
 f=open(dest, "wb")
 f.write(file);
 f.close
except :
 print "file error."

(20:35追記)このpyスクリプトの元ネタはhttp://www.geocities.jp/mirrorhenkan/python/getimg.py.txtです。作者さんに転載の了承を得ています。トップページhttp://www.geocities.jp/mirrorhenkan/からもいろいろ面白いコンテンツに飛べます。

IronPython 1.1.1ではurllibが含まれておらず、Python2.5.2に含まれているライブラリを使うのも互換性の問題で難しいようです。

import sys
sys.path.append("C:\\Program Files\\Python25\\lib")

なんて頭につけてもエラーになります。

でもIronPythonは.NET Framework上で動作する言語なので、これらのライブラリに含まれるクラスが使えます。System.Net.WebClientを使いましょう。なお、System.Net名前空間に含まれるクラスはデフォルトでロードされているので、

import clr
clr.AddReference("System.Net")

などとする必要はありません。これはPowerShellと同様です。

from System.Net import *
url = 'http://img.yahoo.co.jp/images/main7.gif'
dest = 'D:\\script\\test.gif'
wc = WebClient()
wc.DownloadFile(url, dest)

こんな感じ。最初、DownloadFileがスタティックメソッドと勘違いしていて、インスタンスを作る(wc = WebClient())のを忘れてうまく動かなかったですw

元記事:http://blogs.wankuma.com/mutaguchi/archive/2008/03/17/128160.aspx

2007/07/28

窓の杜 - 【NEWS】Windows Vista用ガジェットパック「nDigiGadgets」v0.11が公開、計16本を収録
http://www.forest.impress.co.jp/article/2006/09/21/ndigigadgets011.html

というガジェットシリーズの中に、nDigiTVProgramという、ライブドアのテレビ番組表RSSを取得して表示するガジェットがあり愛用しています。このガジェットの中でMicrosoft.XMLDOMを同期処理(xml.async = false;)で呼び出しているのですが、たまによくloadメソッド実行時に固まります。やっかいなのはガジェットは一つがフリーズすると全体を巻き込むところですね。非同期化するとこの問題は解消します。で、やり方は、

ローカルの XML ドキュメントをロードする (hPod)
http://hwat.sakura.ne.jp/hpod/200612/22-220000/

に載っています。

asyncプロパティをtrueにし、onreadystatechangeイベントに匿名関数を割り当てます。

...
	var xml = new ActiveXObject("Microsoft.XMLDOM");
	//xml.async = false;
	xml.async = true;
	xml.onreadystatechange = function (){
		if( xml.readyState == 4 ){
			// ロード完了時に、何かする
			var rdf;
....この中にもともとloadの後にあった処理を移動させる...
			statustext.title = "次のデータ取得は"+ mindate.getHours() + "時" + mindate.getMinutes() + "分\n今すぐ取得するにはクリック"
		}
	}
	xml.load(uri);


}

var lastLoadText = "";
...

てな感じで。

すべて他の方のネタでごめんなさいですー。私もガジェット作成続きしなきゃ・・・

ちなみにこのガジェットの作者さん、MSMVPを受賞されたそうです。おめでとうございますー。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/07/28/87488.aspx

Copyright © 2005-2016 Daisuke Mutaguchi All rights reserved

mailto: mutaguchi at roy.hi-ho.ne.jp

Awards

Books

Twitter