微信開發(二)Django自媒體、查詢類和問答類訂閱號開發

letflyFYF發表於2014-09-12

一、自媒體訂閱號開發

a、自媒體特點:

1、群發推送為主:每天

2、自媒體

3、資訊量大

4、歷史訊息

b、功能

1、微信瀏覽器:檢視歷史訊息,翻頁

2、全文微信官方伺服器,素材

3、微信對話介面:標題檢索

4、資料庫:人工、半自動新增

5、id , title , discription , url


二、查詢類訂閱號開發

a、功能:

1、關鍵詞拆分

2、API

3、資料庫

資料查詢是訂閱號,或者是一些服務號中的一個比較常用的內容。在第八課講過二級選單的查詢,今天介紹的是關鍵字拆分進行查詢,主要關鍵字拆分主要根據前兩個字,比如我們進行天氣查詢,我們可以輸入:天氣北京、天氣上海。如果需要查詢快遞,我們直接輸入快遞+單號。關鍵查詢主要適用於一次性查詢,二次選單適用於多次查詢。機器人對話,我們一般使用二級選單。關鍵字拆分以後,我們查詢一般是使用查詢API,或者是使用資料庫。網上有一些免費的API(www.36wu.com方便是因為不需要申請pk),呼叫起來相對簡單,與我們之前學的省會查詢結合起來進行關鍵字查詢。

b、主程式碼:

我們的主程式碼,views.py

1、Msgtype="event"

        當關注該公共號時,即Event="subscribe",我們會給使用者回覆一些使用說明,我們這裡的使用說明是“輸入天氣”可以進行天氣的查詢,“輸入翻譯”進入一個英中或中英的翻譯,”輸入省會“我們可以查詢省會。

2、Msgtype="text"

        對content進行拆分我們用前兩個漢字進行拆分,注意python對詞語的拆分從0開始到2(前面兩個漢字)為keyword,後面的內容定義為left,比如我們這裡“天氣北京”,keyword是天氣,left是北京。涉及到漢字的時候,我們這裡使用u轉換成utf-8。

        天氣查詢我們分劃到weather.py封裝起來,這樣我們可以在微信中使用,在其它的網頁中也可以直接匯入。翻譯我們分劃到trans.py封裝起來。省會我們分劃到cap.py封裝起來,cap.py呼叫之前編寫好的models中的py資料庫。

3、API

使用36wu的開源API,包含比較多的幾個免費查詢。weather.py:天氣API返回的是一個預設的json程式碼,注意它這是二維的,[data][weather]。trans.py:翻譯的API(需要兩個引數一個是查詢q,一個是format可以實現中英英中翻譯),注意它這是三維的,[data][0]['dst']。


三、問答類訂閱號開發

關於問答類,沒有限定是訂閱號還是服務號,但是要求有自定義選單(微信認證或者微博認證可以擁有自定義選單),一問到底,答對題目才能繼續下一題,答錯了要重新來。

1、題庫。首先要有一個題庫,十道題

2、自定義選單。我們要有一個自定義選單

3、題目隨機不重複。

4、判斷對錯。選擇是否正確

5、最好成績。成績最好的

首先我們先來題庫的製作:

        題庫欄位:一個是Que(題目),一個是Ans(答案)

        models.py新增兩個表quiz,myuser(item生成隨機次序,避免重複)

        admin.py新增class quizAdmin(admin.ModelAdmin):list_display=('que','ans'),class myuserAdmin(admin.ModelAdmin):list_display=('openid','item','best')兩個不同的admin

        上傳至SAE

        資料庫中新增資料表polls_quiz(兩個欄位),polls_myuser(四個欄位)

接著自定義選單:

        自定義選單首先需要token。gettoken.py中token我們可以用快取進行儲存兩個小時。mc.set("token",token,7200)

        cremenu.py建立選單,把原有的選單刪除掉,再進行新的選單建立

        url.py增加了cre(即cremenu.py)訪問我們的這個檔案進行選單的建立。

題目隨機不重複:

        我們來看一下主檔案views.py。CharField文字型可以填空;但是如果是IntegerField整型你如果填空的,需要加入null=True。所以num沒有插入他是不會報錯的,但是best必須要插入資料。Msgtype如果是事件,則可以進行下面選項的點選;如果是文字,則會回覆”文字“二字。首先我們通過獲取資料中quiz表單中的所有資料來判斷他的len也就是數量我們這裡有10道題,那麼我們就是total就是10。要打亂數列我們用到了隨機函式,random.shuffle(itemlist)將我們的itemlist進行了打亂。通過打亂的數序,我們依次讀取數列號,就達到了數列號不重複的順序。itemlist=eval(itemlist)    eval()函式把字串轉換成數字型。

判斷對錯:

        answer是否==EventKey;

最好成績:成績最好number       

相關文章