微信公众号开发消息推送以及图文推送

今天给大家分享的关注公众号自动推送图文消息,以及做一个超牛逼的机器人。

先看看效果。

file

发错图了。。。这是我昨天开发的一款机器人chu了会骂人啥都不会了。我今天将它词库进行了更新和升级,接入了http://www.itpk.cn/   机器人第三词库
先给你截图:机器人的配置:

file

词库信息。可以自定义词库信息

file

来看看进一步效果
file

是不是乖巧多了哈哈哈。想不想把这个乖巧机器人带走。。。。来吧 给你们秀一波操作。看好了xiongder们别眨眼我要开始变形了。。。
不好意思忘了一件灰常重要的事情,忘了给你们看官方API文档了

点我快速进入官方API文档,反正我最讨厌看这玩意。。。。

第一步登录微信公众平台 现在开发-基本配置然后服务器配置。如下图

file

解释含义:
服务器地址(URL):服务器接收消息的的地址也就自己后台处理逻辑的地方
Toke:需要配置到代码中。可以理解为密码 
消息加解密密钥(EncodingAESKey) 就是防止别人截取你的消息,可以选择加密 我用的明文模式

来吧走个流程图吧。哈哈哈哈。。

file

直接上代码。我代码上的注释很清晰。我就不多解释了。有什么不明白随时联系我。。

/*** 微信消息推送的验证。* * @param request* @param response*/@RequestMapping(value = "sendMsg", method = RequestMethod.GET, produces = "text/html;charset=UTF-8")public void sendMsgget(HttpServletRequest request, HttpServletResponse response) { // 微信加密签名String signature = request.getParameter("signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");PrintWriter out = null;try {out = response.getWriter();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败if (SignUtil.checkSignature(signature, timestamp, nonce)) {out.print(echostr);}out.close();out = null;}package cn.cnbuilder.utils;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;public class SignUtil {// 与接口配置信息中的Token要一致 需要登录微信公众号private static String token = "xxxxxxxxxxx";/*** 验证签名* * @param signature* @param timestamp* @param nonce* @return*/public static boolean checkSignature(String signature, String timestamp, String nonce) {String[] arr = new String[] { token, timestamp, nonce };// 将token、timestamp、nonce三个参数进行字典序排序Arrays.sort(arr);StringBuilder content = new StringBuilder();for (int i = 0; i < arr.length; i++) {content.append(arr[i]);}MessageDigest md = null;String tmpStr = null;try {md = MessageDigest.getInstance("SHA-1");// 将三个参数字符串拼接成一个字符串进行sha1加密byte[] digest = md.digest(content.toString().getBytes());tmpStr = byteToStr(digest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}content = null;// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;}/*** 将字节数组转换为十六进制字符串* * @param byteArray* @return*/static String byteToStr(byte[] byteArray) {String strDigest = "";for (int i = 0; i < byteArray.length; i++) {strDigest += byteToHexStr(byteArray[i]);}return strDigest;}/*** 将字节转换为十六进制字符串* * @param mByte* @return*/private static String byteToHexStr(byte mByte) {char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };char[] tempArr = new char[2];tempArr[0] = Digit[(mByte >>> 4) & 0X0F];tempArr[1] = Digit[mByte & 0X0F];String s = new String(tempArr);return s;}
}

验签验完了之后,我们开始接受消息然后处理逻辑。
file


/*** 处理业务逻辑* * @param request* @param response*/@RequestMapping(value = "sendMsg", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")public void sendMsgPost(HttpServletRequest request, HttpServletResponse response) { // 调用核心业务类接收消息、处理消息try {String respMessage = processRequest(request);System.err.println(respMessage);// 我们这里处理的是utf-8 微信要的是ios8859-1这是坑啊。。。。。byte[] uMessage = respMessage.getBytes("UTF-8");// 编码:字符串变成字节数组 输入 参数(编码表)String iMessage = new String(uMessage, "ISO8859-1");// 解码:字节数组变成字符串,String参数(数组,编码表) 输出if (respMessage != null) {// 响应消息PrintWriter out = response.getWriter();out.print(iMessage);out.close();}} catch (Exception e) {// 也许大概不会走到这里除非异常了。。。。。。}}public String processRequest(HttpServletRequest request) {String respMessage = null;try {// xml请求解析Map<String, String> requestMap = MessageUtil.parseXml(request);// 发送方帐号(open_id)String fromUserName = requestMap.get("FromUserName");// 公众帐号String toUserName = requestMap.get("ToUserName");// 消息类型String msgType = requestMap.get("MsgType");TextMessage textMessage = new TextMessage();textMessage.setToUserName(fromUserName);textMessage.setFromUserName(toUserName);textMessage.setCreateTime(new Date().getTime());textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);// 文本消息if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {// 接收用户发送的文本消息内容String content = requestMap.get("Content");System.err.println(content);// 创建图文消息NewsMessage newsMessage = new NewsMessage();newsMessage.setToUserName(fromUserName);newsMessage.setFromUserName(toUserName);newsMessage.setCreateTime(new Date().getTime());newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);List<Article> articleList = new ArrayList<Article>();// 单图文消息if ("yifan".equals(content)) {Article article = new Article();article.setTitle("欢迎关注KingYiFan's Blog");article.setDescription("点击进入详情");article.setPicUrl("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1521808337402&di=515fdc032be051f5085c3f9c03af5646&imgtype=0&src=http%3A%2F%2Fwww.vvfeng.com%2Fdata%2Fupload%2Fueditor%2F20170327%2F58d8c88855d9f.jpg");article.setUrl("http://cnbuilder.cn/");articleList.add(article);// 设置图文消息个数newsMessage.setArticleCount(articleList.size());// 设置图文消息包含的图文集合newsMessage.setArticles(articleList);// 将图文消息对象转换成xml字符串respMessage = MessageUtil.newsMessageToXml(newsMessage);}else {// 机器人apiString jiqiren = HttpClientUtils.sendGetUtF8("http://i.itpk.cn/api.php","limit=2&api_key=xxxxx&api_secret=xxxx&type=json&question="+ content);textMessage.setContent(jiqiren);respMessage = MessageUtil.textMessageToXml(textMessage);}// 事件处理开始} else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {NewsMessage newsMessage = new NewsMessage();newsMessage.setToUserName(fromUserName);newsMessage.setFromUserName(toUserName);newsMessage.setCreateTime(new Date().getTime());newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);// 事件类型String eventType = requestMap.get("Event");List<Article> articleList = new ArrayList<Article>();if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {Article article = new Article();article.setTitle("欢迎关注KingYiFan's Blog");article.setDescription("点击进入详情");article.setPicUrl("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1521808337402&di=515fdc032be051f5085c3f9c03af5646&imgtype=0&src=http%3A%2F%2Fwww.vvfeng.com%2Fdata%2Fupload%2Fueditor%2F20170327%2F58d8c88855d9f.jpg");article.setUrl("http://cnbuilder.cn/");articleList.add(article);// 设置图文消息个数newsMessage.setArticleCount(articleList.size());// 设置图文消息包含的图文集合newsMessage.setArticles(articleList);// 将图文消息对象转换成xml字符串respMessage = MessageUtil.newsMessageToXml(newsMessage);try {// 保存用户信息wxMsgService.savaWxInfo(fromUserName);} catch (Exception e) {return respMessage;}}} else if (msgType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {// 取消关注,用户接受不到我们发送的消息了,可以在这里记录用户取消关注的日志信息}} catch (Exception e) {e.printStackTrace();}return respMessage;}package cn.cnbuilder.utils;import java.io.InputStream;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDriver;import cn.cnbuilder.entity.wx.sendMsg.Article;
import cn.cnbuilder.entity.wx.sendMsg.MusicMessage;
import cn.cnbuilder.entity.wx.sendMsg.NewsMessage;
import cn.cnbuilder.entity.wx.sendMsg.TextMessage;public class MessageUtil {/*** 返回消息类型:文本*/public static final String RESP_MESSAGE_TYPE_TEXT = "text";/*** 返回消息类型:音乐*/public static final String RESP_MESSAGE_TYPE_MUSIC = "music";/*** 返回消息类型:图文*/public static final String RESP_MESSAGE_TYPE_NEWS = "news";/*** 请求消息类型:文本*/public static final String REQ_MESSAGE_TYPE_TEXT = "text";/*** 请求消息类型:图片*/public static final String REQ_MESSAGE_TYPE_IMAGE = "image";/*** 请求消息类型:链接*/public static final String REQ_MESSAGE_TYPE_LINK = "link";/*** 请求消息类型:地理位置*/public static final String REQ_MESSAGE_TYPE_LOCATION = "location";/*** 请求消息类型:音频*/public static final String REQ_MESSAGE_TYPE_VOICE = "voice";/*** 请求消息类型:推送*/public static final String REQ_MESSAGE_TYPE_EVENT = "event";/*** 事件类型:subscribe(订阅)*/public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";/*** 事件类型:unsubscribe(取消订阅)*/public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";/*** 事件类型:CLICK(自定义菜单点击事件)*/public static final String EVENT_TYPE_CLICK = "CLICK";/*** 解析微信发来的请求(XML)* * @param request* @return* @throws Exception*/@SuppressWarnings("unchecked")public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {// 将解析结果存储在HashMap中Map<String, String> map = new HashMap<String, String>();// 从request中取得输入流InputStream inputStream = request.getInputStream();// 读取输入流SAXReader reader = new SAXReader();Document document = reader.read(inputStream);// 得到xml根元素Element root = document.getRootElement();// 得到根元素的所有子节点List<Element> elementList = root.elements();// 遍历所有子节点for (Element e : elementList)map.put(e.getName(), e.getText());// 释放资源inputStream.close();inputStream = null;return map;}/*** 文本消息对象转换成xml* * @param textMessage 文本消息对象* @return xml*/public static String textMessageToXml(TextMessage textMessage) {xstream.alias("xml", textMessage.getClass());return xstream.toXML(textMessage);}/*** 音乐消息对象转换成xml* * @param musicMessage 音乐消息对象* @return xml*/public static String musicMessageToXml(MusicMessage musicMessage) {xstream.alias("xml", musicMessage.getClass());return xstream.toXML(musicMessage);}/*** 图文消息对象转换成xml* * @param newsMessage 图文消息对象* @return xml*/public static String newsMessageToXml(NewsMessage newsMessage) {xstream.alias("xml", newsMessage.getClass());xstream.alias("item", new Article().getClass());return xstream.toXML(newsMessage);}/*** 扩展xstream,使其支持CDATA块* * @date 2013-05-19*/private static XStream xstream = new XStream(new XppDriver() {public HierarchicalStreamWriter createWriter(Writer out) {return new PrettyPrintWriter(out) {// 对所有xml节点的转换都增加CDATA标记boolean cdata = true;@SuppressWarnings("unchecked")public void startNode(String name, Class clazz) {super.startNode(name, clazz);}protected void writeText(QuickWriter writer, String text) {if (cdata) {writer.write("<![CDATA[");writer.write(text);writer.write("]]>");} else {writer.write(text);}}};}});
}package cn.cnbuilder.entity.wx.sendMsg;public class TextMessage extends BaseMessage {// 消息内容private String Content;public String getContent() {return Content;}public void setContent(String content) {Content = content;}
}package cn.cnbuilder.entity.wx.sendMsg;import java.util.List;public class NewsMessage extends BaseMessage{// 图文消息个数,限制为10条以内  private int ArticleCount;  // 多条图文消息信息,默认第一个item为大图  private List<Article> Articles;  public int getArticleCount() {  return ArticleCount;  }  public void setArticleCount(int articleCount) {  ArticleCount = articleCount;  }  public List<Article> getArticles() {  return Articles;  }  public void setArticles(List<Article> articles) {  Articles = articles;  }  
}package cn.cnbuilder.entity.wx.sendMsg;public class Article {// 图文消息名称private String Title;// 图文消息描述private String Description;// 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80,限制图片链接的域名需要与开发者填写的基本资料中的Url一致private String PicUrl;// 点击图文消息跳转链接private String Url;public String getTitle() {return Title;}public void setTitle(String title) {Title = title;}public String getDescription() {return null == Description ? "" : Description;}public void setDescription(String description) {Description = description;}public String getPicUrl() {return null == PicUrl ? "" : PicUrl;}public void setPicUrl(String picUrl) {PicUrl = picUrl;}public String getUrl() {return null == Url ? "" : Url;}public void setUrl(String url) {Url = url;}}package cn.cnbuilder.entity.wx.sendMsg;public class BaseMessage {// 开发者微信号private String ToUserName;// 发送方帐号(一个OpenID)private String FromUserName;// 消息创建时间 (整型)private long CreateTime;// 消息类型(text/image/location/link)private String MsgType;// 消息id,64位整型private long MsgId;public String getToUserName() {return ToUserName;}public void setToUserName(String toUserName) {ToUserName = toUserName;}public String getFromUserName() {return FromUserName;}public void setFromUserName(String fromUserName) {FromUserName = fromUserName;}public long getCreateTime() {return CreateTime;}public void setCreateTime(long createTime) {CreateTime = createTime;}public String getMsgType() {return MsgType;}public void setMsgType(String msgType) {MsgType = msgType;}public long getMsgId() {return MsgId;}public void setMsgId(long msgId) {MsgId = msgId;}
}
package cn.cnbuilder.utils;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import net.sf.json.JSONObject;public class HttpClientUtils {/*** 向指定URL发送GET方法的请求* * @param url   发送请求的URL* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。* @return URL 所代表远程资源的响应结果*/public static String sendGet(String url, String param) {String result = "";BufferedReader in = null;try {String urlNameString = url + "?" + param;URL realUrl = new URL(urlNameString);// 打开和URL之间的连接URLConnection connection = realUrl.openConnection();// 设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : map.keySet()) {System.out.println(key + "--->" + map.get(key));}// 定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "gbk"));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}return result;}/*** 向指定URL发送GET方法的请求* * @param url   发送请求的URL* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。* @return URL 所代表远程资源的响应结果*/public static String sendGetUtF8(String url, String param) {String result = "";BufferedReader in = null;try {String urlNameString = url + "?" + param;URL realUrl = new URL(urlNameString);// 打开和URL之间的连接URLConnection connection = realUrl.openConnection();// 设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : map.keySet()) {System.out.println(key + "--->" + map.get(key));}// 定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}return result;}/*** 向指定 URL 发送POST方法的请求* * @param url   发送请求的 URL* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。* @return 所代表远程资源的响应结果*/public static String sendPost(String url, String param) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(param);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}public static String doPostForJson(String url, String jsonParams) {CloseableHttpClient httpClient = HttpClients.createDefault();HttpPost httpPost = new HttpPost(url);RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(180 * 1000).setConnectionRequestTimeout(180 * 1000).setSocketTimeout(180 * 1000).setRedirectsEnabled(true).build();httpPost.setConfig(requestConfig);httpPost.setHeader("Content-Type", "application/json"); //try {httpPost.setEntity(new StringEntity(jsonParams, ContentType.create("application/json", "utf-8")));System.out.println("request parameters" + EntityUtils.toString(httpPost.getEntity()));HttpResponse response = httpClient.execute(httpPost);String str = EntityUtils.toString(response.getEntity());/** 把json字符串转换成json对象 **/JSONObject fromObject = JSONObject.fromObject(str);return fromObject.toString();} catch (Exception e) {e.printStackTrace();return "KingYiFan温馨提示你:post请求出异常了" + e.getMessage().toString();} finally {if (null != httpClient) {try {httpClient.close();} catch (IOException e) {e.printStackTrace();}}}}}package cn.cnbuilder.entity.wx.sendMsg;public class Music {// 音乐名称private String Title;// 音乐描述private String Description;// 音乐链接private String MusicUrl;// 高质量音乐链接,WIFI环境优先使用该链接播放音乐private String HQMusicUrl;public String getTitle() {return Title;}public void setTitle(String title) {Title = title;}public String getDescription() {return Description;}public void setDescription(String description) {Description = description;}public String getMusicU
package cn.cnbuilder.entity.wx.sendMsg;public class MusicMessage {// 音乐private Music Music;public Music getMusic() {return Music;}public void setMusic(Music music) {Music = music;}
}
rl() {return MusicUrl;}public void setMusicUrl(String musicUrl) {MusicUrl = musicUrl;}public String getHQMusicUrl() {return HQMusicUrl;}public void setHQMusicUrl(String musicUrl) {HQMusicUrl = musicUrl;}
}package cn.cnbuilder.entity.wx.sendMsg;public class MusicMessage {// 音乐private Music Music;public Music getMusic() {return Music;}public void setMusic(Music music) {Music = music;}
}

这就是微信公众平台消息回复的教程,哪里不懂可以私信我哦!


鼓励作者写出更好的技术文档,就请我喝一瓶哇哈哈哈哈哈哈哈。。
微信:

支付宝:


感谢一路支持我的人。。。。。
Love me and hold me
QQ:69673804(16年老号)
EMAIL:69673804@qq.com
友链交换
如果有兴趣和本博客交换友链的话,请按照下面的格式在评论区进行评论,我会尽快添加上你的链接。


网站名称:KingYiFan’S Blog
网站地址:http://blog.cnbuilder.cn
网站描述:年少是你未醒的梦话,风华是燃烬的彼岸花。
网站Logo/头像:头像地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/40308.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【全网最简单】给朋友- 制作,微信公众号推送教程

简介&#xff1a; 前段时间&#xff0c;抖音非常火的微信公众号推送天气&#xff0c;生日&#xff0c;祝福等信息给女朋友专属推送&#xff0c;而且大部分都是Python写的&#xff0c;对于我来说&#xff0c;必须得整起&#xff0c;上java版本&#xff0c;到时候打个包&#xff…

小扎All in AIGC,连夜成立顶级产品团队

金磊 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT的火爆&#xff0c;终究是让Meta坐不住了。 这不&#xff0c;小扎&#xff08;扎克伯格&#xff09;连夜对外宣布了公司的大动作&#xff1a; 成立顶级产品团队&#xff0c;专注AIGC。 这个团队可以说是整合了全公司搞AIGC的人才…

MySQL 被 PG 干翻!最赚钱的开发语言是他?

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013) Stack Overflow 发布了 2023 年开发者调查报告&#xff0c;据称共计超过 9 万名开发者参与了此次调查。 完整报告包含了受访开发者画像&#xff0c;以及关于开发技术、AI、职业、社区等方面的内容。本文主要介绍关于…

文心一言员工跳槽工资翻倍,猎头:百万年薪很正常

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 前段时间&#xff0c;国内外科技圈呈现出群雄逐“ChatGPT”的态势&#xff1a;谷歌官宣竞品 Bard 、微软发布 AI 驱动的新版 Bing 搜索引擎和 Edge 浏览器、百度官宣“文心一言”、网易…

AIGC分享交流平台、GPT-4、GPT实时联网、Claude

拥有无限畅谈的AI个人助理&#xff0c;提高效率和创造力&#xff0c;引领未来的智能生活&#xff1b; 不仅承载着最前沿的科技理念&#xff0c;更集成了对人工智能可能性的深度理解。 已支持基于GPT、Claude等主流大模型的对话内容生成、支持GPT联网查询实时信息&#xff1b;基…

2022年休闲游戏市场总结

在预测 2023 年之前&#xff0c;我们先回顾一下 2022 年。从上一年发生的事件中往往能看到未来趋势的影子&#xff0c;所以 2022 年的总结至关重要。 一、2022年总结回顾 1、流行游戏类型 回顾 2022 年&#xff0c;三种超休闲游戏表现最为突出&#xff1a; 跑酷游戏&#xff1a…

破解VProtect所有版本,PATCH HWID方式过注册

运行后&#xff1a; 本机机器码"195F9059606EEB4723128A216ED1426B”&#xff0c;在内存中搜索该字符串&#xff0c;可以得到3个地方&#xff0c;我这里以最后搜索到的地方为切入点&#xff0c; 为什么&#xff1f; 找到的3个地方都下内存断点判断&#xff0c;刚好最后找到…

新加坡国立大学学霸,《快乐机器学习》和《Python 从入门到入迷》作者,FRM,CAIA...

王的机器主理人 王圣元 (FRM, CAIA) 某加密货币公司 Head of Quant 冬海集团 SeaMoney 建模负责人 八方咨询 量化总监 新加坡国立大学金融数学硕士 新加坡国立大学量化金融学士 《快乐机器学习》的作者 《Python 从入门到入迷》的作者 第一本书 《快乐机器学习》 第二本书《Pyt…

瑞芯微推出RV1126性能/案例大评测

瑞芯微推出RV1126性能/案例大评测 目录 案例1&#xff1a;面部识别 案例2&#xff1a;图像分割 案例3&#xff1a;目标检测 一、车载录像性能提升一倍,支持8路1080p视频录像 二、内置2T独立NPU,AI效率更高 三、配备安防级ISP,确保夜拍高清晰度 四、存储空间扩容一倍,记录…

【SAT】

A Tutorial to SAT Solving 约束求解基础与应用4.10 1. SAT的概念 Propositional Satisfiability (SAT)&#xff1a;Given a propositional formula φ, test whether there is an assignment to the variables that makes φ true. 公式组成&#xff1a; 布尔变量x litera…

2023年SAT、ACT、AP、Alevel、IB考试时间表

2023年已经来临&#xff01;以下是2023年SAT、ACT、AP、A-Level、IB考试时间安排&#xff0c;早规划早备考&#xff0c;建议大家收藏&#xff01;2023 SAT从2023年开始&#xff0c;美国以外的所有SAT考试都将转为机考&#xff0c;美国SAT考试将在2024年全面转为机考。2023年一共…

13万亿邮储银行数字化转型之路

中国邮政储蓄可追溯至1919 年开办的邮政储金业务&#xff0c;至今已有百年历史。2007年 3月&#xff0c;在改革原邮政储蓄管理体制基础上&#xff0c;中国邮政储蓄银行有限责任公司挂牌成立。2012年1月&#xff0c;本行整体改制为股份有限公司。2016年9月本行在香港联交所挂牌上…

国内的Ubuntu镜像源|Ubuntu清华镜像源

国内的Ubuntu镜像源|Ubuntu清华镜像源 今天学习docker需要在线Ubuntu镜像&#xff0c;所以做了一个镜像下载地址笔记&#xff0c;方面以后的下载。 官方镜像下载访问地址&#xff1a; https://cn.ubuntu.com/download/alternative-downloads 网页拉到最下&#xff0c;找到chi…

AI生成答辩PPT教程

一&#xff1a;通过”AI帮个忙“网站的PPT大纲生成器生成大纲 1 AI帮个忙 | 多功能AI小帮手点击网站进入 1 输入主题&#xff08;论文名&#xff09;会生成大纲 2 复制全部内容 二&#xff1a;通过大纲在AI生成PPT网站进行生成内容 1.通过网站生成&#xff0c;下面提供两种…

AI创作之如何使用Stable Diffusion AI 将自己变成皮克斯动画角色 (教程含完整操作步骤)

无论您想成为下一个伍迪、下一个巴斯光年,还是将您的鱼变成下一个尼莫,Stable Diffusion都能实现。使用这种潜在的文本到图像扩散模型,您只需一个简单的文本提示,就可以将自己变成任何皮克斯角色的样子。 在本文中,我将向您展示如何在本地 PC 上运行 Stable Diffusion,并…

PPT绘图之AI助力论文图

PPT绘图之AI助力论文图 前言一、工具准备二、PPT绘图导出1.绘制2.AI助力后期处理 总结 前言 之前为了在边界的PPT里绘论文图&#xff0c;修改了office注册表&#xff0c;将导出分辨率设置为600dpi&#xff0c;但是该方法有一个缺点&#xff1a;需要提前将页面调整到合适大小&am…

用AI轻松修图!教你下载并使用Adobe Photoshop (Beta)智能化软件

节省时间&#xff0c;提高效率&#xff01;使用Adobe Photoshop (Beta)智能化软件快速修图。 一&#xff0c;首先下载Adobe Creative Cloud 百度网盘链接&#xff1a;https://pan.baidu.com/s/1aNVLllhvBrj40i3wtuvAAA?pwdw11s 提取码&#xff1a;w11s 二&#xff0c;下载…

用人工智能帮我做PPT啦,试试chatPPT

首先进入网站 https://chat-ppt.com/ 然后尝试输入一段描述&#xff0c;让它给我制作一份PPT 好吧&#xff0c;等了半天啥也没出来 好吧&#xff0c;在我内心吐槽的时候&#xff0c;它出来了一些内容&#xff0c;如下&#xff1a; 完整的PPT内容可以下载查看&#xff0c;如左…

华为云WeLink智能语音助手专题(上篇:WeLink智能语音助手是什么?)

华为云WeLink是华为内部打磨多年的远程办公软件、协同办公平台、移动办公平台、协同办公软件&#xff0c;源自华为19万员工的数字化办公实践&#xff0c;融合多屏协同、视频会议、打卡、报销、考勤、审批、企业网盘、IM消息、邮件、音视频、云空间、OA、小程序等服务&#xff0…

chatgpt赋能python:PythonUrwid:一个优秀的控制台UI工具

Python Urwid&#xff1a;一个优秀的控制台UI工具 在开发控制台应用程序时&#xff0c;通常需要一种轻而易举的方法来创建用户界面。Python Urwid是一个高效&#xff0c;可定制的控制台UI工具&#xff0c;它可以帮助你创建强大的用户界面&#xff0c;同时获取出色的响应时间。…