2011年9月27日 星期二

Ruby on Rails 發佈 Twitter 消息

image

圖片來源:https://dev.twitter.com/

 

流程大綱

要在 Twitter 發佈消息,要做幾件事情:

  1. 註冊一個 Twitter 帳號
  2. 用 Twitter 帳號申請 Twitter APP
  3. 將 Twitter APP 權限調整成 「Read and Write」
  4. 在 Ruby on Rails 透過 Twitter OAuth 認證機制取得 access_token
  5. 利用 Ruby on Rails 用 access_token 呼叫 Twitter API 進行發佈

 

參考資訊

https://github.com/oauth/oauth-ruby

https://github.com/twitter4r/twitter4r-core

http://twitter4r.rubyforge.org/

 

流程說明,直接從「用 Twitter 帳號申請 Twitter APP」開始

登入你的 Twitter ,在右下方找到「開發人員」

image

 

一樣在右下方,點擊「Create an app」

image

 

填寫 APP 所需資訊,在這邊 Web Site / Callback URL 的 host:port 是填寫你自己的網站位址(測試用的話,填 127.0.0.1:3000 也可以)

PS:"myapp" 若跟人家衝突到,就自己亂 key 一個名字吧,實際上我是 key “myapp1234”

image

 

填好之後,打勾按下同意

image

 

按下 Settings

image

 

將 Access 的 permission 更改為 Read and Write 按下送出

image

 

image

 

回到 Details

image

 

把 Key 跟 Secret 記下來

image

 

接著產生一個 RoR 的專案

SNAGHTML240def4

 

在 GemFile 裡加上這兩行

image

 

下達 bundle install

SNAGHTML242353e

 

接著下達 rails g controller twitter

SNAGHTML243dd11

 

打開 controller twitter_controller.rb 貼上以下程式碼

image 

class TwitterController < ApplicationController
  def consumer
    consumer = OAuth::Consumer.new('你剛剛申請到的 Key ', '你剛剛申請到的 Secret', {
      :site => 'https://api.twitter.com',
      :authorize_path => '/oauth/authorize'
    })
    return consumer
  end
  
  def login
    request_token = consumer.get_request_token(:oauth_callback => File.join(request.protocol + request.host_with_port, 'twitter/callback'))
    session[:request_token] = request_token.token
    session[:request_token_secret] = request_token.secret
    redirect_to request_token.authorize_url
  end
  
  def callback
    request_token = OAuth::RequestToken.new(consumer, session[:request_token], session[:request_token_secret])
    access_token = request_token.get_access_token(:oauth_verifier => params[:oauth_verifier])
    client = Twitter::Client.new(:oauth_access => {
      :key => access_token.params[:oauth_token], :secret => access_token.params[:oauth_token_secret]
    })
    client.status(:post, '你要發佈的消息')
    render :text => access_token.params
  end
end

 

到 config/routes.rb 把最下面一行註解拿掉

image

 

接著打開 rails server

SNAGHTML24df66a

 

打開瀏覽器輸入底下網址

image

 

授權應用程式

image

 

稍等一下會跳轉到 callback 頁面

image

 

此時到 Twitter 上看,就可以看到消息成功發佈了!

image

 

 

PS:若你要發佈的消息為中文,記得把檔案編碼改為 utf-8 並在檔案上方加入 「#encoding: utf-8」 喔!

image

image

2011年9月25日 星期日

Windows Phone 一行程式都不用寫的氣泡遊戲

SNAGHTMLd07ace

事前準備

首先必須先安裝 Windows Phone SDK,安裝方式請直接到微軟的官網下載,並隨著步驟安裝,這邊就不特別一步一步講了。(沒特別需求就下一步到底就對了)

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13890

 

假設已經安裝好了,那麼…

打開 Microsoft Expression Blend 4

image

 

然後新建一個專案

image

 

我們選擇 Windows Phone Application 將專案名稱取名叫 WOW

image

 

打開後會長這樣

image

 

先將改改標題,讓應用程式有名有份

image

 

接著點選左上方的 Assets

image

 

Control –> All –> Image 找到 Image

image

 

將它拖曳到你的主畫面上,可以看到左下方多了一個元素,畫面上也多了一個方框

image

 

接著我們在畫面上點選方框,在右方的 Source 選張圖片給它

image

 

然後回到左上角的 Behaviors ,找到 PlaySoundAction 以及 RemoveElementAction

image

 

將 PlaySoundAction 以及 RemoveElementAction 拖曳到主畫面的圖片上,就會看到左下角的 Image 底下多了剛剛幫它添加的 Behaviors

image

 

點選 PlaySoundAction ,到右方進行編輯,選個適合的 mp3 給他,記得將音量調到1,避免以為沒有聲音。(這邊可以提供我個人錄製的 wow,沒有版權問題喔!)

image

 

接著存檔,然後 Run Project (其實按下 F5 也可以)

image

 

然後就可以把它點破,並發出你選擇的聲音檔。(剩下就自己多複製幾個泡泡,然後擺到你想要的位置囉!)

SNAGHTMLcdc0b3

2011年9月16日 星期五

Google+ API 與 php

image

如果你沒有用過 Facebook API,那建議你可以先閱讀底下的文章釐清一些觀念

透過 Facebook API,讓你的 Facebook Application 發佈動態消息

 

Google+ API 已經可以使用囉!但目前只開放讀取部分資訊。

image

 

其實照著 Google+ 的文件進行就可以了,大概分幾個步驟:

 

到這裡註冊你的 Google Application,註冊方式可以參考這裡。

 

特別要注意的是,如果你用的是 php 的 Library,這個步驟結束之後…

 

要記得把 Redirect URI 改成這樣(實際上還是得以你放置的路徑為主,這個例子,我是將 index.php 放置在 www root 底下)

image

 

到這裡可以看到等會需要輸入的資訊(黃色框住的部分)

image

 

到這裡打開你的 Google+ API。

image 

 

到這裡下載你使用的語言的 Library,這個範例是用 php 完成的(但 Ruby 的部分,我也測試過)

image

 

接著把 google-plus-php-client.zip 跟 google-plus-php-starter.zip 解壓縮到 Apache Web 的根目錄下。

SNAGHTML1efe26c

 

打開 index.php 填寫剛剛申請獲得的資訊。

image

 

打開 localhost 就完成囉!

SNAGHTML1fb85bc

 

如果操作過程中,出現了

CURL Error 60: SSL certificate problem, verify that the CA cert is OK.
Details: error:14090086:SSL routines
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

的錯誤,可以參考底下這個網站解決!

http://richardwarrender.com/2007/05/the-secret-to-curl-in-php-on-windows/

Ruby on Rails 搜尋資料建立的日期範圍

在 RoR 建立 Model 的時候,它會自動幫 table 補上三個欄位:id, created_at, updated_at。可以利用

 

而 created_at, updated_at 的 class 是 ActiveSupport::TimeWithZone,要特別注意的是每種時間 class 基準上的不同。

 

我們如果在頁面上這樣設計與搜尋:

image

 

而我們希望利用 created_at 搜尋到 「2011-9-16 00:00:00」 ~ 「2011-9-16 23:59:59」(不包含 2011-9-17 00:00:00) 的資料,那麼 controller 這邊應該要這樣處理。

程式碼

 
@start_date_year = params[:search][:start_date_year]
@start_date_month = params[:search][:start_date_month]
@start_date_day = params[:search][:start_date_day]
@end_date_year = params[:search][:end_date_year]
@end_date_month = params[:search][:end_date_month]
@end_date_day = params[:search][:end_date_day]
 
Model.where(
    :created_at =>
        ("#{@start_date_year}-#{@start_date_month}-#{@start_date_day}".to_date.to_time)..
        (("#{@end_date_year}-#{@end_date_month}-#{@end_date_day}".to_date + 1).to_time - 1
)

 

主要是利用 to_date 將字串轉換為 class Date 方便 +1 day,再利用 to_time 轉換為 class Time 方便 –1 second,此時 class Time 與 class ActiveSupport::TimeWithZone 是同一個時間基準(Date 快了 8 hours ,時區的關係),便可直接比對。