基于Django、WeRoBot的微信公眾平臺開發(fā)(二) - 后續(xù)

這里是 基于Django耘柱、WeRoBot的微信公眾平臺開發(fā)(二) 的后續(xù)如捅,主要記錄其它功能的開發(fā)。

“優(yōu)美詩句”功能

原理:爬取優(yōu)美詩句调煎,存入數(shù)據(jù)庫镜遣,封裝接口,調(diào)用接口

作用:在公眾號里回復(fù)“來個優(yōu)美的句子”或者“來句詩”,它便會回復(fù)給你一條優(yōu)美的詩句悲关。

過程

實現(xiàn)過程和“講個笑話”功能類似谎僻。

1、創(chuàng)建數(shù)據(jù)庫表

作用:在數(shù)據(jù)庫(mysql)中創(chuàng)建用于存儲詩句的表

create table `poetrys` ( 
  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `content` varchar(1024) NOT NULL
) DEFAULT CHARSET=utf8;

2寓辱、編寫段子抓取腳本

作用:抓取 句子迷中“句集:小明”中的句子艘绍,存儲在數(shù)據(jù)庫中(只存儲之前沒出現(xiàn)過的詩句,避免重復(fù))秫筏。

#coding=utf-8
import urllib
import urllib2
import re
import MySQLdb

timeout=5                                   # 超時時間
host = 'http://www.juzimi.com'     # 句子迷主頁面
target = 'album/1572107'             # 句子迷“句集:小明”欄目

def get_html(url,timeout=None):
    # 獲取指定url的html源碼
    try:
        headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'  }
        request = urllib2.Request(url,headers=headers)
        response = urllib2.urlopen(request,timeout=timeout)
    except Exception,e:
        raise '[Error] get_html()獲取源碼失敗\n' + e
    return response.read()

    
def connectMySQL():
    # 連接mysql數(shù)據(jù)庫
    conn = MySQLdb.connect(
        host='localhost',
        port=3306,
        user='YOUR_USERNAME',
        passwd='YOUR_PASSWORD',
        db='blog',
        charset='utf8',
        )
    return conn

def getPoetry():
    # 抓取詩句
    # 獲取總頁數(shù)
    try:
        pagesum = 7
    except Exception,e:
        print e
        return []

    poetry_list = []

    # 開始爬取
    for page in range(0,pagesum):
        print '當(dāng)前頁數(shù):',page
        url = '%s/%s?page=%d'%(host,target,page)
        try:
            html = get_html(url,timeout).decode('utf8')
        except Exception,e:
            print e
            print '抓取出錯诱鞠,跳過第%s頁'%page
            continue
        print '正在匹配……'
        pattern = re.compile("<div id=\"bdshare\" class=\"bdshare_t bds_tools get-codes-bdshare\" data=\"{'text':'.*?','desc':'(.*?)','url':'.*?','pic':'.*?'}\">",re.S)
        items = re.findall(pattern,html)

        # 匹配到詩句
        for item in items:
            print item
            poetry_list.append(item)
                
    return poetry_list

def save2mysql(poetry_list):
    # 將抓取的段子存入數(shù)據(jù)庫
    conn = connectMySQL()
    cur = conn.cursor()
    for i,poetry in enumerate(poetry_list):
        print '正在插入第%d句詩……'%(i+1)
        sql = 'select 1 from poetrys where content = "%s" limit 1; '%(poetry)
        isExist = cur.execute(sql)
        if isExist==1:
            print '-> 該詩句已存在于數(shù)據(jù)庫!放棄插入这敬!'
        else:
            sql = 'insert into poetrys (`content`) values ("%s")'%( poetry )
            cur.execute(sql)
    print '正在提交以上所有操作……'
    conn.commit()

def main():
    #  主程序
    try:
        poetry_list = getPoetry()
        save2mysql(poetry_list)
    except Exception,e:
        print e

if __name__=='__main__':
    main()

3航夺、接口函數(shù)實現(xiàn)

作用:每次調(diào)用,從數(shù)據(jù)庫中隨機取出一條詩句崔涂,以json的格式返回阳掐。

前言:代碼集成在django中,不想在django中使用的可以適當(dāng)修改代碼冷蚂。

代碼

from django.http import HttpResponse
import MySQLdb
import random
import json

# 公共部分
# 數(shù)據(jù)庫設(shè)置
username = 'YOUR_USERNAME'      # 你的數(shù)據(jù)庫用戶名
password = 'YOUR_PASSWORD'      # 你的數(shù)據(jù)庫密碼
dbname = 'YOUR_DB'                          # 你創(chuàng)建的表所在的數(shù)據(jù)庫
dbport = 3306

# 數(shù)據(jù)庫連接函數(shù)
def connectMySQL():
    # 連接mysql數(shù)據(jù)庫
    conn = MySQLdb.connect(
        host='localhost',
        port=dbport,
        user=username,
        passwd=password,
        db=dbname,
        charset='utf8',
        )
    return conn

# 接口部分
# 返回一條詩句
def get_poetry(request):
    response = ''
    try:
        # 連接數(shù)據(jù)庫
        conn = connectMySQL()
        cur = conn.cursor()
        # 生成隨機抓取id
        sql = 'select count(*) from poetrys'
        cur.execute(sql)
        poetry_sum = cur.fetchone()[0]
        poetry_idx = random.randint(1,poetry_sum)
        # 抓取該id的段子數(shù)據(jù)
        sql = 'select * from poetrys where id=%d'%poetry_idx
        cur.execute(sql)
        poetry = {}
        poetry['id'],poetry['content'] = cur.fetchone()
        response = json.dumps(poetry,ensure_ascii=False)
        # 關(guān)閉數(shù)據(jù)庫連接
        cur.close()
        conn.close()
    except Exception as e:
        print e
        logger.error(e)
    return HttpResponse(response)

前端接口封裝好之后缭保,可以在瀏覽器中輸入以下url測試這個接口:

http://www.yangyingming.com/api/get_poetry/

每次刷新都會返回不同的詩句。

4蝙茶、集成在微信機器人中

作用:將“優(yōu)美詩句”功能集成到微信機器人的聊天功能中涮俄,用戶在聊天窗口發(fā)送“來個句子”類似的消息時,隨機回復(fù)一條詩句尸闸。

代碼

@robot.text
def echo(message):
    if re.compile(".*?詩.*?").match(msg) or\
       re.compile(".*?句.*?").match(msg):
        apiurl = "http://www.yangyingming.com/api/get_poetry"
        response = get_html(apiurl,timeout=timeout)
        joke = json.loads(response)
        return joke['content'].encode('utf8')

運行效果:

運行效果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市孕锄,隨后出現(xiàn)的幾起案子吮廉,更是在濱河造成了極大的恐慌,老刑警劉巖畸肆,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宦芦,死亡現(xiàn)場離奇詭異,居然都是意外死亡轴脐,警方通過查閱死者的電腦和手機调卑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來大咱,“玉大人恬涧,你說我怎么就攤上這事〔杲恚” “怎么了溯捆?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厦瓢。 經(jīng)常有香客問我提揍,道長啤月,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任劳跃,我火速辦了婚禮谎仲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刨仑。我一直安慰自己郑诺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布贸人。 她就那樣靜靜地躺著间景,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艺智。 梳的紋絲不亂的頭發(fā)上倘要,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音十拣,去河邊找鬼封拧。 笑死,一個胖子當(dāng)著我的面吹牛夭问,可吹牛的內(nèi)容都是我干的泽西。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼缰趋,長吁一口氣:“原來是場噩夢啊……” “哼捧杉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秘血,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤味抖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后灰粮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仔涩,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年粘舟,在試婚紗的時候發(fā)現(xiàn)自己被綠了熔脂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡柑肴,死狀恐怖霞揉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晰骑,我是刑警寧澤零聚,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響隶症,放射性物質(zhì)發(fā)生泄漏政模。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一蚂会、第九天 我趴在偏房一處隱蔽的房頂上張望淋样。 院中可真熱鬧,春花似錦胁住、人聲如沸趁猴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儡司。三九已至,卻和暖如春余指,著一層夾襖步出監(jiān)牢的瞬間捕犬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工酵镜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碉碉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓淮韭,卻偏偏與公主長得像垢粮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子靠粪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容