所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
#创意#百度音箱和DF论坛的懒人协议
kylinpoet kylinpoet 2020-05-23 01:30:04
2
3
简单

【项目介绍】

        人工智能技术的发展,让智能语音功能成为生活中比较实用的功能。君子动口不动手,能用说的绝不用做的,是懒人们喜闻乐见的。本文就带各位实现下怎么用小度智能音箱在论坛自动签到和阅读文章,或许发帖也不是问题。。。

【解决方案】

        要实现本项目的功能至少需要解决两个问题:1.如何定制小度智能音箱功能,让其为我所用;2.怎样不通过浏览器访问论坛,而直接脱机签到和阅读文章。


步骤1 步骤1
定制小度智能音箱功能

小度智能音箱使用的系统是DuerOS,百度公司开放了:https://dueros.baidu.com/open 平台。具体文章,论坛里云天老师有相关介绍,我比较懒,这里就不暂开讲了,请自行搜索解决。但是平台自身是使用python2,个人不太喜欢。因此找了个第三方的API库,https://github.com/jokenwang/bot-sdk-python,在本地搭建Web_Server,方便调试。但由于没有公网IP,因此需要使用内网穿透工具进行部署。

projectImage
步骤2 步骤2
论坛的脱机签到和阅读功能
1.论坛的签到功能比较简单和其他DZ论坛的签到插件一样,只要POST一条签到信息到https://mc.dfrobot.com.cn/plugin.php即可。表情包的ID需要抓包获取,怎么抓包,因为不是重点,这里就不提了。

2.阅读文章功能是用了论坛首页的一个API地址,https://mc.dfrobot.com.cn/forum_api.php?act=ajax_forum&module=new&page=1,每页20条数据,总共有8页,主要是显示论坛最新的160条数据。

3.然后再抓包获取下登录的session,就可以开搞了。

【作品演示】

有源码有真相,主要是用了百度DUEROS的SDK进行开发,通过获取百度音箱的回调接口和意图槽位进行语音和语义分析,从而调用论坛的不同实现功能。


这是签到函数:

代码 代码
	                    					def df_sign():
    global req_session, formhash
    print(formhash)
    if req_session:
        url_sign = 'https://mc.dfrobot.com.cn/plugin.php?id=dsu_paulsign%3Asign&operation=qiandao&infloat=1&sign_as=1&inajax=1'
        payload = 'formhash={}&qdxq=dk&qdmode=2&todaysay=&fastreply=0'.format(formhash)
        response = req_session.post(url_sign, payload, headers=headers)
        sign_flag = -1
        if '成功' in response.text:
            print('签到成功')
            sign_flag = 0
        elif '已经签到' in response.text:
            print('你已经签到')
            sign_flag = 1
        else:
            print('未知错误')
            sign_flag = 2
        url_user_api = 'https://mc.dfrobot.com.cn/user_api.php'
        response = req_session.get(url_user_api, headers=headers)
        ret_json = response.json()
        extcredits4 = int(ret_json['extcredits4'])
        return sign_flag, extcredits4

    else:
        return
	                    				



这是查看论坛信息函数,为了省事直接获取第一条信息。

代码 代码
	                    					def get_new_topic():

    global last_time, req_session
    url_new_topic = 'https://mc.dfrobot.com.cn/forum_api.php?act=ajax_forum&module=new&page=1'
    response = req_session.get(url_new_topic, headers=headers).json()
    if not response:
        return
    else:
        return f"论坛第一条信息为:{response[0]['title']},发帖时间{response[0]['publish']}"
	                    				
projectImage


【演示视频】


【制作过程】

        这个过程几万字略过不表。主要是码农的三部曲:代码,bug,调试以及周而复始。

projectImage

【项目总结】

        此项目在签到、阅读文章的基础上,还可以加上回帖、点赞等功能,无非就是抓包。因为时间关系就不加了(主要是懒)。阅读文章功能实际上还可以细化,比如阅读前N篇文章。阅读文章全文等等,有兴趣的同学可以自行补充。

        当然本项目只是抛砖引玉的一个例子,实际上有了智能音箱的接口,就不单单可以用来进行论坛上的一些操作。可以进行其他功能开发了。正如百度DUEROS开发平台所说:唤醒万物 用AI点亮世界。

【相关资源】

如若进行开发请先:pip install dueros-bot,安装第三方库,然后按照文档处理即可。

附件 附件
Makelog作者原创文章,未经授权禁止转载。
2
3
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]