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/11/08

Scripting Weblog
http://blogs.wankuma.com/mutaguchi/

という文字列を選択して実行すると

Scripting Weblog

というアンカータグをつくってくれるマクロ。IEと連携するにはこのBookmarkletを併用するといい感じです。

URLだけ選択してもそのURLへのアンカータグを作ってくれます。

便利ー。

'URLにアンカータグを付ける
	Set RegEx = New RegExp
	RegEx.Global = True
	RegEx.MultiLine=True
	RegEx.Pattern = "(http\:\/\/[\:\w\/\.\?\&\#\~\=\-\+\@\%\,\(\)]+)"

Set sel=document.selection
If Not sel.IsEmpty Then
	sText=sel.Text
	
	If InStr(sText,vbCrLf)<>0 Then
		sNewLine=vbCrLf
	ElseIf InStr(sText,vbCr)<>0 Then
		sNewLine=vbCr
	ElseIf InStr(sText,vbLf)<>0 Then
		sNewLine=vbLf
	Else
		sNewLine=vbCrLf
	End If
	
	If InStr(sText,sNewLine)<>0 Then
		aLine=Split(sText,sNewLine)
		If Ubound(aLine)=1 Then
			'2行の場合、1行目をタイトル、2行目をURLとみなしてリンク化
			sel.Text="" &  aLine(0) & ""
		Else
			'複数行の場合、URLのみをリンク化
			sel.Text=RegEx.Replace(sText,"$1")
		End If
	Else
		sel.Text=RegEx.Replace(sText,"$1")
	End If 
	
	sel.Collapse
End If
元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/11/08/106982.aspx

2007/10/04

・.で始まるタイトルのファイルが同期されない

例) .NETのサイトです.url

これは.で始まるファイルをUNIX風にhiddenとみなすためと思われます。個人的にはシェルがちゃんとurlファイルと認識してるんだから例外として扱ってほしかったですね。どこかに設定あります?

 

・アクセスするたびにお気に入りバーの順序が変わる

最終アクセス日時が変わるのでお気に入りをクリックするたびに、ほかのPCと同期してしまうため順序が狂う。

これはちょっと・・・

 

結論:Groove2007をIEのお気に入り同期に使うのは微妙かな。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/10/04/99806.aspx

2007/04/27

小品ですが。よくタブブラウザに搭載されている機能なのですがIEでも使いたいと思うケースがあるので。

javascript:void(window.clipboardData.setData("Text", document.title + "\r\n" +document.location.href)); 元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/04/27/73503.aspx

2006/12/23

http://blogs.wankuma.com/mutaguchi/archive/2006/07/07/31826.aspx
の続きです。クリップボード中に複数URLが複数行に記述されている場合、それらをまとめてダウンロードするように改良しました。

Const adTypeBinary = 1
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
 
sDLFolder = "C:\download"
 
Set Ie = WScript.CreateObject("InternetExplorer.Application")
'Ie.Visible = True
Ie.Navigate "about:blank"
Do While Ie.Busy Or Ie.ReadyState<>4
    Wscript.Sleep 10
Loop
'クリップボードの文字列を取得。
sClipBoard = Ie.Document.parentWindow.clipboardData.getData("text")  
Ie.Quit
 
If InStr(sClipBoard,vbCrLf) Then
    aURLs = Split(sClipBoard,vbCrLf)
Else
    aURLs = Array(sClipBoard)
End If
 
For Each sURL In aURLs
    If Left(sURL,5)="http:" Then
        sDest = sDLFolder & "\" & Mid(sURL,InStrRev(sURL,"/")+1)
        Set oHTTP = WScript.CreateObject("Msxml2.XMLHTTP")
        oHTTP.Open "GET", sURL, False
        oHTTP.Send
        Set Stream = WScript.CreateObject("Adodb.Stream")
        Stream.Type = adTypeBinary
        Stream.Open
        Stream.Write oHTTP.responseBody
        Stream.Savetofile sDest, adSaveCreateOverWrite
    End If
Next
 
msgbox "done"

ところがこれをIE7環境で実行すると毎回こんなダイアログがでるんですね。
このWebページがクリップボードへアクセスするのを許可しますか?
インターネットゾーンのレベルのカスタマイズで、「スクリプトによる貼り付け処理の許可」を「ダイアログを表示する」から「有効にする」に変えればダイアログは出なくなりますがお勧めしません。それよりは"about:blank"の代わりに何かローカルのファイルを指定してやったほうがいいです。ローカルのファイルはマイコンピュータゾーンで動作するのでダイアログが出ません。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/12/23/53018.aspx

2006/12/07

PowerShellはXMLの扱いが簡単なので、RSSリーダーを作ってみました。参考にしたのは
Channel9 Wiki: ReadRSS
http://channel9.msdn.com/wiki/default.aspx/Channel9.ReadRSS
です。

function ReadRSS 
{
    param ([string]$url, [int]$maxResults)               # パラメータ URLと取得するタイトル数
    $client = new-object System.Net.WebClient;           # WebClientオブジェクト作成
    $client.Encoding = [System.Text.Encoding]::UTF8;     # EncodingクラスのUTF8プロパティ(スタティック)参照
    $xmldoc =  [xml]$client.downloadstring($url);        # ダウンロードした結果をテキストで得て[XML]にキャスト
    if ($xmldoc.rss -eq $null)                           # rssプロパティがなければ
    {
    # RSS1.0
        "[" + $xmldoc.RDF.channel.title + "]";           # ブログのタイトルを取得。
        $node = $xmldoc.RDF;                             # RDFプロパティを変数に代入
    }else{ 
    # RSS2.0
        "[" + $xmldoc.rss.channel.title + "]";           # ブログのタイトルを取得
        $node = $xmldoc.rss.channel;                     # RSSプロパティを変数に代入
    }
    for ($i = 0; $i -lt $maxResults; $i ++)              # 0からmaxResultの値までループ
    {
         $node.item[$i].Title;                           # channelのItem配列からTitleプロパティを取得。
    }
}
ReadRSS "http://rss.rssad.jp/rss/itm/rss2dc.xml" 10      #RSS1.0の例
ReadRSS "http://blogs.wankuma.com/mutaguchi/Rss.aspx" 10 #RSS2.0の例

ブログのタイトルと記事タイトルが指定数だけ取得されます。RSS1.0/2.0対応です。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/12/07/48906.aspx

2006/09/20

Bookmarkletとは、ブラウザのURL欄に入力して表示中のページに何らかのアクションを起こすスクリプトのことで、「お気に入り」や「ブックマーク」に指定することで再利用可能になります。ありがちだと思いますが、HTMLソースを表示するBookmarkletを書いてみました。

javascript:document.write(document.body.parentElement.outerHTML.replace(/\/g,">").replace(/\n/g,"
"));

実はこれを書いたのにはわけがあって、W-ZERO3[es]上で動作するPocketIEにソースを見る機能がないため作成したのですが…。肝心のPocketIE上ではうまく動作しません(泣

outerHTMLなどが取れないみたいですね。innerHTMLも駄目。writeとかalertとか使えるのに惜しいです。URLEncodeもなんか変で、\が%5Cにならず/になっちゃいます。最初これがエラーの原因かと思いましたが違いました。

でもOperaでは使えますよ!(なんか一昔前のWindows版ブラウザ事情とは逆だな〜)

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/09/20/39209.aspx

2006/07/07

IEを使って指定したURLのファイルをダウンロードしようとしても、IEで開かれてしまったりしてなかなかうまくいきません。そこでこんなスクリプトを作ってみました。クリップボードに格納されたURLのファイルをダウンロードするスクリプトです。PowerShellではなくWSHのスクリプトですが、たまにはこんなのも良いでしょう。

Set Ie = WScript.CreateObject("InternetExplorer.Application")
Ie.Navigate "about:blank"
Do While Ie.Busy And IE.readyState=4
    Wscript.Sleep 100
Loop
'クリップボードの文字列を取得。
sClipBoard = Ie.Document.parentWindow.clipboardData.getData("text")  
Ie.Quit 
If Left(sClipBoard,5)="http:" Then
    sDest = Mid(sClipBoard,InStrRev(sClipBoard,"/")+1)
    Const adTypeBinary = 1
    Const adSaveCreateNotExist = 1
    Const adSaveCreateOverWrite = 2
    Set oHTTP = WScript.CreateObject("Msxml2.XMLHTTP")
    oHTTP.Open "GET", sClipBoard, False
    oHTTP.Send
    Set Stream = WScript.CreateObject("Adodb.Stream")
    Stream.Type = adTypeBinary
    Stream.Open
    Stream.Write oHTTP.responseBody
    Stream.Savetofile sDest, adSaveCreateOverWrite
    msgbox "done"
End If
元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/07/07/31826.aspx

新しい記事のページへ


Copyright © 2005-2018 Daisuke Mutaguchi All rights reserved
mailto: mutaguchi at roy.hi-ho.ne.jp
プライバシーポリシー

Twitter

Books