用powershell實做wget
在unix-like系統上,有個wget,可以用來抓取遠方主機的檔案(如網頁)下來,然後做後續的處理…在windows除非特別去找軟體來裝,否則沒此工具可用。
最近在玩Flickr的API,需要這樣的功能。加上電腦上都有裝powershell。於是乎,就想利用powershell來模擬wget的處理。
一開始,寫了如下的function來使用…
Flickr所回傳的XML是抓下來了。不過,因為他是web service,編碼是採用utf8。因此,抓下來的檔案中如果有中文字,不經轉碼直接拿來處理的話…不幸的,會有問題……
因此,做如下的處理來轉碼。利用get-content 先將抓回來的檔案轉成utf8後,再去處理。這樣,XML才會正常!
不過,玩到後來,因為每次所抓的資料不多,不想將Flickr API所傳回的資料存放在檔案內。想直接在記憶體內處理即可。但…怎麼找,都找不到一個簡單的轉字串編碼的處理方式。
只好還是乖乖K一下MSDN,沒想到,其實只要如下的一行設定,問題就輕鬆解決了!
修改後的wget,使用方式如下…
最近在玩Flickr的API,需要這樣的功能。加上電腦上都有裝powershell。於是乎,就想利用powershell來模擬wget的處理。
一開始,寫了如下的function來使用…
function wget([string]$url, [string]$file){
$client = new-object System.Net.WebClient
$client.DownloadFile($url, $file)
}
$client = new-object System.Net.WebClient
$client.DownloadFile($url, $file)
}
Flickr所回傳的XML是抓下來了。不過,因為他是web service,編碼是採用utf8。因此,抓下來的檔案中如果有中文字,不經轉碼直接拿來處理的話…不幸的,會有問題……
因此,做如下的處理來轉碼。利用get-content 先將抓回來的檔案轉成utf8後,再去處理。這樣,XML才會正常!
$dl_file=[System.IO.Path]::GetTempFileName()
wget("http://url", $dl_file)
[xml]$list = get-content $dl_file -encoding utf8
wget("http://url", $dl_file)
[xml]$list = get-content $dl_file -encoding utf8
不過,玩到後來,因為每次所抓的資料不多,不想將Flickr API所傳回的資料存放在檔案內。想直接在記憶體內處理即可。但…怎麼找,都找不到一個簡單的轉字串編碼的處理方式。
只好還是乖乖K一下MSDN,沒想到,其實只要如下的一行設定,問題就輕鬆解決了!
function wget([string]$url){
$client = new-object System.Net.WebClient
$client.Encoding = [System.Text.Encoding]::GetEncoding("utf-8")
return $client.DownloadString($url)
}
$client = new-object System.Net.WebClient
$client.Encoding = [System.Text.Encoding]::GetEncoding("utf-8")
return $client.DownloadString($url)
}
修改後的wget,使用方式如下…
$result=wget("http://url")
[xml]$list = $result
[xml]$list = $result
留言