引言
微信公众平台支持向用户回复图文信息消息。本文以豆瓣电影搜索为例,实现回复图文信息。即用户输入电影名称、演员或导演信息,公众号返回相应的豆瓣电影信息。读者可以关注公众号zakic2015体验该功能,操作示例及效果图如下:
豆瓣电影搜索API
豆瓣API相关介绍参考http://developers.douban.com/wiki/?title=guide,为了完成我们的目标,分两步进行:(1)从电影条目中提取相关某电影id信息(2)通过id得到该电影的详细信息。
(1)从电影条目中提取相关某电影id信息:
先看下豆瓣开发文档中相关电影条目搜索格式:
电影条目搜索
Resources URI
/v2/movie/search?q={text}
Required Scope
movie_basic_r
Example:
GET /v2/movie/search?q=张艺谋 GET /v2/movie/search?tag=喜剧
Status:
200 OK
搜索返回的json结果如下:
然后从该json结果提取电影"id",这里直接取第一条电影条目的id,提取结果如下:
movie_id = movie_01['subjects'][0]['id']
(2)通过id得到该电影的详细信息。
还是先看豆瓣开发文档先关电影条目搜索格式
Resources URI
/v2/movie/subject/:id
Required Scope
movie_basic_r
Example:
GET /v2/movie/subject/1764796
Status:
200 OK
通过上述得到的id,搜索返回的json结果如下:
参看微信公众平台开发文档(http://mp.weixin.qq.com/wiki/home/index.html)回复图文信息说明:
参数 | 是否必须 | 说明 |
---|---|---|
ToUserName | 是 | 接收方帐号(收到的OpenID) |
FromUserName | 是 | 开发者微信号 |
CreateTime | 是 | 消息创建时间 (整型) |
MsgType | 是 | news |
ArticleCount | 是 | 图文消息个数,限制为10条以内 |
Articles | 是 | 多条图文消息信息,默认第一个item为大图,注意,如果图文数超过10,则将会无响应 |
Title | 否 | 图文消息标题 |
Description | 否 | 图文消息描述 |
PicUrl | 否 | 图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200 |
Url | 否 | 点击图文消息跳转链接 |
title = movie['title']
desc = movie['summary']
picurl = movie['images']['large']
url = movie['alt']
replyList = [title,desc,picurl,url]
return self.render.reply_one_news(fromUser,toUser,int(time.time()),replyList)
<pre name="code" class="python"># -*- coding: utf-8 -*-
import urllib2
import json
class DouBan:
def query_movie(self,word):
baseurl_01 = r'http://api.douban.com/v2/movie/search?q='
qword = urllib2.quote(word)
url_01 = baseurl_01 + qword + r'&apikey=yourAppKey'
resp_01 = urllib2.urlopen(url_01)
movie_01 = json.loads(resp_01.read())
movie_id = movie_01['subjects'][0]['id']
baseurl = r'http://api.douban.com/v2/movie/subject/'
url = baseurl + movie_id + r'?apikey=<span style="font-family: Arial, Helvetica, sans-serif;">yourAppKey</span>'
resp = urllib2.urlopen(url)
movie = json.loads(resp.read())
return movie
微信公众平台回复单图文信息的reply_one_news.xml格式如下:
$def with (toUser,fromUser,createTime,list)
<xml>
<ToUserName><![CDATA[$toUser]]></ToUserName>
<FromUserName><![CDATA[$fromUser]]></FromUserName>
<CreateTime>$createTime</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>1</ArticleCount>
<Articles>
<item>
<Title><![CDATA[$list[0]]]></Title>
<Description><![CDATA[$list[1]]]></Description>
<PicUrl><![CDATA[$list[2]]]></PicUrl>
<Url><![CDATA[$list[3]]]></Url>
</item>
</Articles>
<FuncFlag>1</FuncFlag>
</xml>
参考
http://ju.outofmemory.cn/entry/36079
关注