1. pycontw
  2. Untitled project
  3. questionnaire

Overview

環境設定與安裝

要使問卷統計程式能運作,必需完成設定檔 cfg.yaml,範本如下:

group_publisher:
    username: 
    password: 
    toaddr: 
    fromaddr:

questionnaire:
    public_url: 
    file_id:

credentials_file: oauth.credentials

它使用 yaml 格式撰寫,共有三組設定:

  1. group_publisher 設定透過 gmail 發信至論壇時的相關資訊
  2. questionnaire 設定問卷的公開網址與 google drive file id
  3. credentials_file 使用 Google Driver API 時 OAuth2 需要的認證資訊

安裝需要的套件

pip install BeautifulSoup
pip install pyyaml
pip install google-api-python-client httplib2

註:soupselect.py 是來自 CSS selector extension for BeautifulSoup

產生 credentials_file

執行 googledrive.py generate_oauth_credentials_file 產生 Google Drive SDK OAuth 認證資訊:

(pycon)qty:PyConf2013 qrtt1$ python googledrive.py generate_oauth_credentials_file
client application id:357880100911-0fouogndgn8q2c88gj7tljdnrp22397d.apps.googleusercontent.com
client application secret:[you_secret_key]
No handlers could be found for logger "oauth2client.util"
Go to the following link in your browser: https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&client_id=357880100911-0fouogndgn8q2c88gj7tljdnrp22397d.apps.googleusercontent.com&access_type=offline
Enter verification code: 4/h56lDfHKa9xXcYp5vnREiEgJwtNF.wmaXIiyfjkQcgrKXntQAax2SbctVeQI
The credentials_file saved to credentials_file.new
(pycon)qty:PyConf2013 qrtt1$

輸入完 application id 與 application secret 後,點選取得應用程式授權畫面的連結:

授權畫面

一旦選擇「允許存取」後,你會取得一組 Request Code,將它輸入至 Enter verification code: 並按下 Enter 讓程式繼續取得 credentials:

Request Code

執行完畢,程式會在執行目錄下建立 credentials_file.new 請修改成想要的檔名,並將它記錄在 cfg.yaml 內,例如改成:oauth.credentials

註:請參考 Quickstart: Run a Drive App in Python 啟用 API。

查詢 file_id

建立完成 credentials_file 後,我們的程式就擁有 api 存取的權限。執行 googledrive.py list_files_with_id 取得問卷的 file_id

(pycon)qty:PyConf2013 qrtt1$ python googledrive.py list_files_with_id oauth.credentials "PyCon Taiwan 2013 問卷"
title PyCon Taiwan 2013 問卷
file_id 0AlLimBVBHaesdEZIZVJBSkFHSzlxYnV3RlZjbEhqV3c

其中 0AlLimBVBHaesdEZIZVJBSkFHSzlxYnV3RlZjbEhqV3c 就是問卷的 file_id,請將它填入 cfg.yaml。到這個步驟,我們已經有下列設定(public_url 請自行填寫):

group_publisher:
    username: 
    password: 
    toaddr: 
    fromaddr:

questionnaire:
    public_url: "https://docs.google.com/spreadsheet/viewform?formkey=dEZIZVJBSkFHSzlxYnV3RlZjbEhqV3c6MQ#gid=0"
    file_id: 0AlLimBVBHaesdEZIZVJBSkFHSzlxYnV3RlZjbEhqV3c

credentials_file: oauth.credentials

問卷結果發佈設定

group_publisher 需要填寫一組被授權的 gmail,它必需擁有透過 email 向論壇發佈新文章的權限。

  1. Google 安全性設定 找到『已連結的應用程式和網站』,按下『管理存取權』
  2. 尋找『應用程式專用密碼』,請替問卷結果發佈者申請一組新的隨機密碼。
  3. 將完整的 gmail 填寫在 usernamefromaddr,隨機密碼填寫在 password
  4. 將 toaddr 填上發佈對象的 mail address。

執行程式

一旦所有內容都準備完成,執行 stat.py 即可自動發佈結果。

stat.py 它的執行內容如下:

  1. parse config['questionnaire']['public_url'] 取得實際上存在的問卷題目,並將每一題轉換成 Question 物件
  2. 下載問卷資料,並統計每一個問題的數量
  3. 產生結果
  4. 利用 gmail 送信的方式將結果發佈至論壇