On twitter

看來有工作可以交派給偉彬了 lol

follow me on twitter

在 app engine 上用 urlfetch 解短網址 0

昨天在寫一個程式, 功能是在把 twitter 上帶有 mp3 連結的訊息, 轉成 podcast 好讓我可以用 iTunes 訂閱, 自動下載 XD 推特那一段就直接用了 twitter search 產生的 json, 然後 mp3 的連結都是 tinyurl 產生的短網址, 直覺我就透過了 longurl 的 api 來回復短網址。

誰知道 longurl api 常 request 失敗, 也許可能是因為連續的 request 造成的。後來就突然想到了, 反正 header 都會帶有轉址的原網址吧, 所以就用 urlfetch 單純只抓 header, 然後 parse header 抓出來正常的網址就好啦~ 誰知道看了一下 urlfetch 的文件有居然 final_url 這個 method, 噗, 結果解短網址就變得超簡單。

result = urlfetch.fetch(tinyurl, method=urlfetch.HEAD)
if result.status_code == 200:
    url = result.final_url
February 8th, 2010 Programming Tags: , , , ,

App Engine 405 Method Not Allowed 2

不太清楚為何webapp 為何沒有 implement HEAD method, 所以一開始在 MyAudioCast 的 DashBoard 就常看到一些錯誤, 多是一些 web crawler, 但卻都是 405 Method Not Allowed 的錯誤訊息, 用 curl -I 來測也是得到相同的回應, 本來不以為意, 後來為了要讓 MyAudioCast 上面的 Podcast 可以 submit 到 iTunes store, 卻也得到 405 的錯誤訊息, 無法 submit, 才覺得這事情有點大條 XD

google 之後找到一篇寫到說, 用 app engine 開發的網站無法 digg, 就是因為 405 這個問題, 因為要新增網址到 digg 的時候 digg 會用 HEAD method 來確認網頁是存在的, 所以說先前 Dashboard 上看到的 web crawler 也會先用 HEAD 來檢查網頁是否存在, 這麼一來只要是 HEAD method 都回 405 Method Not Allowed 的話, 那機器人不就都不來了嗎?

不過這問題其實很好解決, 幸好這次在開發的時候有先寫一個 RequestHandler 來繼承 webapp.RequestHandler 所以直接在 RequestHandler 增加一個 head method 就可以解決這個了。

def head(self, *args):
    pass

最簡單的就是這樣 XD 不過不知道是否改為執行 get method 然後把 content 去掉只留 header 這樣會不會比較好 :p

February 7th, 2010 Programming Tags: , , ,

App Engine BlobStore 試玩心得 0

一開始構想 MyAudioCast 的時候, 原本是想說把檔案都送到 S3, 然後透過 CloudFront 還可以玩 rtmp streaming, 後來發現 urlfetch 只能傳 1MB 所以放棄, 就只好使用 BlobProperty, 沒想到 BlobProperty 也只有 1MB, 後來才知道 app engine 1.3.0 有了 BlobStore, 可以放 50MB 的檔案, 雖然還在實驗中, 不過到還是真的可以用, 所以就把東西都放在 app engine。

不過要使用 BlobStore 之前就得先開啟付費的資料, 準備開始扣款, 而 BlobStore 每天的 free quota 也只有 1GB, 原本以為有點小, 但其實只要給他 $0.10 / day 就可以有 40GB per day, 老實說其實滿划算的。 只是單檔 50MB 的限制 … 我是覺得 100MB 比較寬裕一點。

後來才發現, App Engine 真的貴的是在出去的頻寬。 outgoing bandwidth 的 free quota 也是 1GB per day, 可是當我 budget 設定 $0.66 / day, 也才提昇到 6.5GB per day。

所以最後我還是試了一下這一篇寫的方式, 來把檔案丟到 S3。 雖然剛開始用 S3 就有看過這個辦法, 可是根本不會想去試, 不過現在在 app engine 上似乎是成為唯一能傳大檔到 S3 的方式了, 只是就少了一些可以控制的東西, 也需要一些 workaround。

不過現在用 S3 + CloudFront 感覺良好 XD 另外, 我一直把 Blob 打成 Blog Orz

February 6th, 2010 Programming Tags: , , ,

MyAudioCast – 輕鬆建立你的 Podcast! 4

這幾天花了點時間寫了 MyAudioCast, 因為台灣的 Podcast 真的是很不流行, 但是其實發現有一些人錄好了 podcast 之後, 卻因為不知道檔案要放哪, 還有不知道要如何產生 podcast feed 而煩惱。 雖然外國有一些 podcast hosting, 但是感覺不夠簡單, 甚至是介面很雜亂, 所以在希望能降低發佈 Podcast 門檻的想法下, 就利用 Google App Engine 寫了 MyAudioCast, 來降低發佈 Podcast 的門檻。

所以現在只需要有 Google 帳號, 就可以登入 MyAudioCast 上傳 podcast 檔案, 上傳完檔案之後就有個人的 Podcast 頁面, 也有 iTunes 的 Podcast feed 可以供人訂閱, 應該夠簡單了吧!? 雖然目前還缺少了 flash player 可以 embed 出去 :p

其實想做 MyAudioCast 的想法已經好一陣了, 我喜歡一些所謂”素人”錄製的聲音產出, 像是獨立音樂或是身旁朋友錄的 Podcast, 但是在台灣的中文 Podcast 卻極度的少, 大部分應該在建立自己的 Podcast 上碰到些技術的門檻。 而台灣也沒人做 podcast hosting, 畢竟是個燒錢事, 所以我就利用 App Engine 來做一個 Podcast hosting, 降低發佈門檻, 希望能多聽到些聲音。

雖然說目前 app engine 的 BlobStore 只能上傳 50MB, 而且 BlobStore 還是實驗性功能, 不過應該夠用吧 XD

如果可以的話, 看到這篇文章的朋友, 也幫我多宣傳一下吧 :p 雖然很容易超過 free quota, 不過初期其實要燒也燒不了多少吧。 超過的都算我的吧, 趕快上傳 Podcast 來聽阿!!!

話說有人要幫忙我做 logo 嗎? XD 另外有什麼想法也提一下吧 ~

February 4th, 2010 Computer, Programming, Web Tags: ,

少女時代 girl’s generation 第二張專輯, 首發單曲 oh! 6


這個影片我這幾天不知道看了多少遍了, 超可愛的!! 然後上班的時候我也一直重覆播放這首單曲, oh! 超好聽的!!! jessica 的聲音超甜的! :D

January 29th, 2010 Music, Video Tags: , ,
Partners of Oceanic / 人生海海

jiwo sca wellmeet