这是一个非常简单的例子,作为新手的我是拿来练手的,当然也可以给和我一样的朋友一些参考。

而且图灵官网没有给出C的例子,网上一搜也是各种Java、C#甚至易语言实现,不要歧视C++好不好●︿●,就算不如语言老大PHP,它也是很强的!

这个例子其本质就是一个C++写的get数据  (POST和这个也差不多啦,可以自己动手试一试╭(′▽`)╯ )

没有用MFC,直接用的WindowAPI哦,用的是winhttp。

也没有使用JSON库之类的来解析数据,因为我是暴力拆解字符串的,所以如果返回值位数不对可能会乱码(大雾)。

好了,放源码:

 /*
图灵机器人 C++实现 极简版
几乎没有界面(废话,毕竟是控制台) 代码参考自微软提供的例子,见:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384104(v=vs.85).aspx
*/ #include <iostream>
#include <Windows.h>
#include <winhttp.h>
#pragma comment(lib,"winhttp.lib") #define TULING_URL L"www.tuling123.com/openapi/api?key=这里换成你自己从图灵申请的API啦&info=%s"
static wchar_t String[]; //编码转换
char *UnicodeToANSI(const wchar_t *str)
{
static char result[];
int len = WideCharToMultiByte(CP_ACP, , str, -, NULL, , NULL, NULL);
WideCharToMultiByte(CP_ACP, , str, -, result, len, NULL, NULL);
result[len] = '\0';
return result;
}
wchar_t *UTF8ToUnicode(const char *str)
{
static wchar_t result[];
int len = MultiByteToWideChar(CP_UTF8, , str, -, NULL, );
MultiByteToWideChar(CP_UTF8, , str, -, result, len);
result[len] = L'\0';
return result;
}
wchar_t *ANSIToUnicode(const char* str)
{
int textlen;
static wchar_t result[];
textlen = MultiByteToWideChar(CP_ACP, , str, -, NULL, );
memset(result, , sizeof(char) * (textlen + ));
MultiByteToWideChar(CP_ACP, , str, -, (LPWSTR)result, textlen);
return result;
} bool GetHttpPage(void)
{
DWORD dwSize = ;
DWORD dwDownloaded = ;
LPSTR pszOutBuffer = NULL;
static HINTERNET hSession = WinHttpOpen(L"A Tuling API Example Program/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, );
static HINTERNET hConnect = NULL, hRequest = NULL;
BOOL bResults = FALSE; //从控制台读出一行文字,注意读出来的内容是ANSI编码的,我们需要转换成 Unicode编码
static char uin[]; gets_s(uin);
wsprintf(String, TULING_URL, ANSIToUnicode(uin)); //建立一个http的连接会话,给出主机名就行,可以域名,也可以是IP地址,不需要http;前缀
if (hSession)
{
if (!hConnect)
hConnect = WinHttpConnect(hSession, L"www.tuling123.com", INTERNET_DEFAULT_HTTP_PORT, );
} //创建一个HTTP请求句柄
if (hConnect)
hRequest = WinHttpOpenRequest(hConnect, L"GET", String, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_ESCAPE_PERCENT | WINHTTP_FLAG_REFRESH); //发送请求数据
if (hRequest)
bResults = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, , WINHTTP_NO_REQUEST_DATA, , , ); // 请求结束,接收数据
if (bResults)
bResults = WinHttpReceiveResponse(hRequest, NULL);
else
printf("Error %d has occurred.\n", GetLastError());
//如果返回值为false,可以使用getlasterror来得到错误信息,下同
//返回值的详细信息可以看微软网页,或者看这里翻译好的中文接口说明
//http://blog.csdn.net/fengsh998/article/details/8201591 // 内部使用的一个循环来确保能接受到所有数据
if (bResults)
{
do
{
//检查是否还有数据需要接收
dwSize = ;
if (!WinHttpQueryDataAvailable(hRequest, &dwSize))
{
printf("Error %u in WinHttpQueryDataAvailable.\n", GetLastError());
break;
} if (!dwSize)
break; //为缓冲分配内存并读取
pszOutBuffer = new char[dwSize + ]; if (!pszOutBuffer)
{
printf("Out of memory\n");
break;
} ZeroMemory(pszOutBuffer, dwSize + ); if (!WinHttpReadData(hRequest, (LPVOID)pszOutBuffer, dwSize, &dwDownloaded))
{
printf("Error %u in WinHttpReadData.\n", GetLastError());
}
else
{
//图灵api返回来的内容使用的是UTF-8编码,我们需要把它转换回ANSI才能在控制台显示
//printf("return:%s\n", UnicodeToANSI(UTF8ToUnicode(pszOutBuffer)) ); //因为没有使用JSON库,所以我暴力拆了这字符串。
pszOutBuffer[strlen(pszOutBuffer)-] = '\0';
printf("小灵:%s\n\n", UnicodeToANSI(UTF8ToUnicode(pszOutBuffer)) + );
return true;
} delete[] pszOutBuffer;
if (!dwDownloaded)
break; } while (dwSize > );
} //收尾,关闭被打开的句柄
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession); return false;
} int main(void)
{
system("color F0");
system("title 会聊天的图灵机器人 ●﹏●");
printf("\n 我是小灵,快来和我聊天吧! ●▽●\n\n"); do{ printf("我:"); } while (GetHttpPage()); system("pause");
return ;
}

VS2013可以直接Paste后编译就用,额需要注意的是使用 Unicode 字符集,如果不是的话可能会出现不可预料的东西(因为我没试过╮(╯▽╰)╭)

所有代码包括注释加起来是150行,编译后也才10K左右,可以放心食用!

哦,再放张图片好了

图灵机器人API调用 C++版的更多相关文章

  1. 调用图灵机器人API实现Android智能机器人

    非常感谢CSDN博客上的鸿洋哥,他贴出的源码是我所做的工作的基础,鸿洋哥博客链接http://blog.csdn.net/lmj623565791/article/details/38498353 下 ...

  2. 【chrome插件】web版微信接入图灵机器人API实现自动回复

    小贱鸡自动回复API已经不可以用了,现在改良接入图灵机器人API 360chrome浏览器团队翻译了部分谷歌插件开发文档 地址:http://open.chrome.360.cn/extension_ ...

  3. 使用图灵机器人API实现聊天机器人

    使用图灵机器人的API需要先注册,获取key才行,这我就不说了,自己到http://www.tuling123.com/注册一个账号即可. 下面就是一个简单的python调用API实现聊天机器人的简易 ...

  4. Delphi 实现 图灵机器人API(IDHTTP POST )

    此功能所需的 Key及接口文档,都可以在图灵机器人的官网下载, 小伙伴们需要申请自己的图灵机器人账号. 申请方法请自行百度“图灵机器人”  . 登录账号后,在左侧的[机器人接入],获取需要的信息,记得 ...

  5. 使用图灵机器人api搭建微信聊天机器人php实现

    之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.yshizi.cn/131.html 逻辑如下: 下面我简单介绍一下步 ...

  6. 图灵机器人api的使用方法含微信版本和网页版

    访问图灵机器人官网http://www.tuling123.com/ 注册一个新的机器人账号 注册成功后转到主页 点击我的机器人>创建机器人>微信机器人 填写基本信息 点击微信介入> ...

  7. Python 调用图灵机器人 API

    ''' Python3''' import requests #导入requests库 import json #导入json库 key = '3119f1e3610f42c5977ea73c4097 ...

  8. 图灵机器人API接口

    调用图灵API接口实现人机交互 流程一: 注册 图灵机器人官网: http://www.tuling123.com/ 第一步: 先注册, 然后创建机器人, 拿到一个32位的key 编码方式 UTF-8 ...

  9. 图灵机器人API,适用于微信、微博、QQ群、智能硬件等

    该API有智能聊天.查天气.查快递.查菜谱.查车票.查航班.查出行.查周边等近500个功能,能够用在微信公众平台.QQ群.手机语音助手.智能硬件等领域\ [1].[代码] [PHP]代码 跳至 [1] ...

随机推荐

  1. 22.Python赋值运算符(入门必读)

    赋值运算符主要用来为变量(或常量)赋值,在使用时,既可以直接用基本赋值运算符“=”将右侧的值赋给左侧的变量,右侧也可以在进行某些运算后再赋值给左侧的变量. = 基本赋值运算符 Python 使用“=” ...

  2. centos6升级系统内核

    1.升级系统内核查看内核版本: uname -r 2.6.32-573.8.1.el6.x86_64 导入elrepo的key: rpm --import https://www.elrepo.org ...

  3. SNOI2017炸弹

    这个东西其实我是不太会的……但是勉强卡过去了. 首先肯定是建有向图,然后求每个节点能访问的节点个数,最裸的打法就是按照题意枚举建边然后tarjan缩点,用bitset记录一下访问节点,但是bitset ...

  4. 搞清楚MySQL事务隔离级别

    首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 然后往表中插入两条数据,插入后结果如下: 为了说明问题 ...

  5. leetcode-hard-array-454 4sum II-NO

    mycode   过不了...我也不知道为什么... class Solution(object): def fourSumCount(self, A, B, C, D): ""& ...

  6. 内置对象(Date String Math Array)

    什么是对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方法: ...

  7. 显示Pl/Sql Developer window list窗口

    默认情况下Window List窗口是不显示的,这十分不方便 (一)在菜单项的Tools下的Preference选项中的UserInterface中选择Option,在右边对于的Autosave de ...

  8. Mac下制作openwrt U盘启动盘

    华硕路由用腻了,正好家里有老旧淘汰的电脑,那么非常适合折腾一下OpenWrt,科学上网靠自己. 什么是OpenWrt:OpenWrt是适合于嵌入式设备的一个Linux发行版. 参考资料:https:/ ...

  9. 找出所有从根节点到叶子节点路径和等于n的路径并输出

    //找出所有从根节点到叶子节点路径和等于n的路径并输出 Stack<Node> stack = new Stack<Node>(); public void findPath( ...

  10. python - 技术提高要点之一,函数式编程,性能,测试和编码规范

    摘自:http://www.cnblogs.com/kaituorensheng/p/4516983.html 函数式编程 命令式的编程风格已经成为事实上的标准.命令式编程的程序是由一些描述状态转变的 ...