C#新增永久图文素材
新增永久图文素材
接口调用请求说明
http请求方式: POST,https协议 https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN
//同步公众号素材
JavaScriptSerializer Jss=new JavaScriptSerializer();
string respText=cwebcms.Web.user.BasicApi.WebRequestPostOrGet(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", AppID, AppSecret), "");
Dictionary<string, object> respDic=(Dictionary<string, object>)Jss.DeserializeObject(respText);
string accessToken=respDic["access_token"].ToString();
//上传封面图片获取media_id
string ssPath=Server.MapPath(uc.PicURL);
string re=cwebcms.Common.Public.add_material("image/jpeg", ssPath, accessToken);
string thumb_media_id="";
respDic=(Dictionary<string, object>)Jss.DeserializeObject(re);
if (respDic.ContainsKey("media_id"))
{
thumb_media_id=respDic["media_id"].ToString();
}
cwebcms.Common.Public.saveLogFiles(5, "re" + re, "errmsg:", "thumb_media_id:" + thumb_media_id);
//上传图文消息内的图片获取URL
//替换内容区的所有图片为素材中的图片
string content=uc.Content;
string pattern="\\<img\\ [\\s\\S]*?src=['\"]?(?<f>[^'\"\\>\\ ]+)['\"\\>\\ ]";
Regex reg=new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
Match match=reg.Match(content);
string gPicURL="", img_url="";
int Picnumj=1;
while (match.Success)
{
gPicURL=match.Groups["f"].Value;
ssPath=Server.MapPath(gPicURL);
re=cwebcms.Common.Public.uploadimg(ssPath, accessToken);
respDic=(Dictionary<string, object>)Jss.DeserializeObject(re);
if (respDic.ContainsKey("url"))
{
img_url=respDic["url"].ToString();
}
content=content.Replace(gPicURL, img_url);
Picnumj++;
match=match.NextMatch();
}
string url="https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=" + accessToken;
string str="{" +
"\"articles\": [{" +
"\"title\": \"" + uc.NewsTitle + "\"," +
"\"thumb_media_id\": \"" + thumb_media_id + "\"," +
"\"author\": \"" + uc.Author + "\"," +
"\"digest\": \"" + uc.naviContent + "\"," +
"\"show_cover_pic\": 1," +
"\"content\": \"" + content.Replace("\"", "\'") + "\"," +
"\"content_source_url\": \"https://ft.cwebcrm.cn/mmg/user/view_detail.html?companyid=gzh&id=" + uc.ID + "\"," +
"\"need_open_comment\":1," +
"\"only_fans_can_comment\":1" +
"\"}," +
//若新增的是多图文素材,则此处应还有几段articles结构
"\"]" +
"\"} ";
cwebcms.Common.Public.saveLogFiles(5, "@url" + url, "errmsg:", "str:" + str);核心代码
string media_id="";
string strReturn=cwebcms.Common.Public.PostUrl(@url, str);
cwebcms.Common.Public.saveLogFiles(5, "n", "", "strReturn:" + strReturn);
respDic=(Dictionary<string, object>)Jss.DeserializeObject(strReturn);
if (respDic.ContainsKey("media_id"))
{
media_id=respDic["media_id"].ToString();
}
string sql="update cwebcms_news set media_id='" + media_id + "' where NewsID='" + uc.NewsID + "'";
int n=sd.updatesql(sql);
//上传封面图片
上传图文消息内的图片获取URL
本接口所上传的图片不占用公众号的素材库中图片数量的100000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下。
接口调用请求说明
http请求方式: POST,https协议 https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN 调用示例(使用curl命令,用FORM表单方式上传一个图片): curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"
public static string uploadimg(string file,string accessToken)
{
string fileName=file;
string url=string.Format("https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token={0}", accessToken);
FileStream fs=new FileStream(file, FileMode.OpenOrCreate, FileAccess.Read);
byte[] fileByte=new byte[fs.Length];
fs.Read(fileByte, 0, fileByte.Length);
fs.Close();
// 设置参数
HttpWebRequest request=WebRequest.Create(url) as HttpWebRequest;
CookieContainer cookieContainer=new CookieContainer();
request.CookieContainer=cookieContainer;
request.AllowAutoRedirect=true;
request.Method="POST";
string boundary=DateTime.Now.Ticks.ToString("X"); // 隨機分隔線
request.ContentType="multipart/form-data;charset=utf-8;boundary=" + boundary;
byte[] itemBoundaryBytes=Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
byte[] endBoundaryBytes=Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
//请求头部信息
StringBuilder sbHeader= new StringBuilder(
string.Format(
"Content-Disposition:form-data;name=\"media\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n",
fileName));
byte[] postHeaderBytes=Encoding.UTF8.GetBytes(sbHeader.ToString());
Stream postStream=request.GetRequestStream();
postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
postStream.Write(fileByte, 0, fileByte.Length);
postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
postStream.Close();
HttpWebResponse response=request.GetResponse() as HttpWebResponse;
Stream instream=response.GetResponseStream();
StreamReader sr=new StreamReader(instream, Encoding.UTF8);
string content=sr.ReadToEnd();
return content;
}
新增其他类型永久素材(注意视频接口不可用,上传也不审核)
接口调用请求说明
通过POST表单来调用接口,表单id为media,包含需要上传的素材内容,有filename、filelength、content-type等信息。请注意:图片素材将进入公众平台官网素材管理模块中的默认分组。
http请求方式: POST,需使用https https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE 调用示例(使用curl命令,用FORM表单方式新增一个其他类型的永久素材,curl命令的使用请自行查阅资料)
public static string add_material(string type, string file, string accessToken)
{
string fileName=file;
string url=string.Format("https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={0}&type={1}", accessToken, type);
FileStream fs=new FileStream(file, FileMode.OpenOrCreate, FileAccess.Read);
byte[] fileByte=new byte[fs.Length];
fs.Read(fileByte, 0, fileByte.Length);
fs.Close();
// 设置参数
HttpWebRequest request=WebRequest.Create(url) as HttpWebRequest;
CookieContainer cookieContainer=new CookieContainer();
request.CookieContainer=cookieContainer;
request.AllowAutoRedirect=true;
request.Method="POST";
string boundary=DateTime.Now.Ticks.ToString("X"); // 隨機分隔線
request.ContentType="multipart/form-data;charset=utf-8;boundary=" + boundary;
byte[] itemBoundaryBytes=Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
byte[] endBoundaryBytes=Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
//请求头部信息
StringBuilder sbHeader= new StringBuilder(
string.Format(
"Content-Disposition:form-data;name=\"media\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n",
fileName));
byte[] postHeaderBytes=Encoding.UTF8.GetBytes(sbHeader.ToString());
Stream postStream=request.GetRequestStream();
postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
postStream.Write(fileByte, 0, fileByte.Length);
postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
postStream.Close();
HttpWebResponse response=request.GetResponse() as HttpWebResponse;
Stream instream=response.GetResponseStream();
StreamReader sr=new StreamReader(instream, Encoding.UTF8);
string content=sr.ReadToEnd();
return content;
}
//
public static string PostUrl(string url, string postData)
{
string result="";
HttpWebRequest req=(HttpWebRequest)WebRequest.Create(url);
req.Method="POST";
req.Timeout=5000;//设置请求超时时间,单位为毫秒
req.ContentType="application/json";
byte[] data=Encoding.UTF8.GetBytes(postData);
req.ContentLength=data.Length;
using (Stream reqStream=req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
HttpWebResponse resp=(HttpWebResponse)req.GetResponse();
Stream stream=resp.GetResponseStream();
//获取响应内容
using (StreamReader reader=new StreamReader(stream, Encoding.UTF8))
{
result=reader.ReadToEnd();
}
return result;
}
家好,我是Echa。
又到周五啦,提前祝大家周末愉快!今天来分享一些实用的前端工具!
Small Dev Tools 是一个前端工具网站,包含了很多实用的功能,比如JSON解码器、JSON格式化程序、UTF8编码、Base64编码、Base64解码、CSS格式化程序、CSS压缩器等。
官网:https://smalldev.tools/
Carbon 是一个在线工具,可以生成漂亮的不同风格的代码图片。
官网:https://carbon.now.sh/
UI 设计日报,提供免费优质的 UI 资源。
官网:https://www.uidesigndaily.com/
ColorHunt,即颜色猎人,是一个在线设计配色的网站,其最大的特点就是使用饱和度调配配色方案。每天会根据浏览量进行更新排版,并可以直接使用。
官网:https://colorhunt.co/
SCHEME COLOR 是一个在线的配色工具网站,可以根据颜色、类型等查找合适的配色方案。
官网:https://www.schemecolor.com/
Keyframes 可以用来创建动画、阴影和使用颜色,帮助我们编写更好的CSS。
官网:https://keyframes.app/
Design Resources 是一个设计资源的集合。
官网:https://www.designresourc.es/
Omatsuri 是一个开源项目,包含12个实用的前端工具。
官网:https://omatsuri.app/
UI Snippets 是一个前端动画合集,可以通过右键点击想要的动画直接复制对应的 CSS 或 SCSS 代码。
官网:https://ui-snippets.dev/
Pattern CSS 可以用漂亮的图案填充空白背景。
官网:https://bansal.io/pattern-css
Can I use 可以用来查询 HTML5、CSS、JS、SVG 在各种流行浏览器中的特性和兼容性。
官网:https://caniuse.com/
CSS Gradient 是一个用来快速方便的创建 CSS 渐变的网站。
官网:https://cssgradient.io/
CSS matic 是一个 CSS 工具,目前包含4个很有用的工具,分别是:支持各种颜色和透明度的渐变工具,使用渐变工具,可以创建渐变平滑的色彩变化效果和微妙的透明胶片;边框圆角工具可以帮助你方便的实现需要的圆角效果;噪声纹理可以帮助你创造奇妙的背景图案,能够实时预览结果;盒阴影工具可以控制模糊半径的变化,颜色变化,阴影大小,可以实现你想要的任何效果。
官网:https://www.cssmatic.com/
Am I Responsive 用来测试响应式网页。输入链接即可生成预览,Am I Responsive 能帮我们测试出页面在手机、平板电脑、笔记本电脑和桌面端设备上的浏览体验。
官网:http://ami.responsivedesign.is/
这是一个实用的 CSS 生成器,可以实时查看调试效果。
官网:https://html-css-js.com/css/generator/
My Brand New Logo 是一个CSS 调色板生成器,用来创建一致的调色板方案。
官网:https://mybrandnewlogo.com/color-palette-generator
CSS cli-path 功能能够构建复杂的形状,该工具让我们可以轻松地以交互方式构建该多边形。
官网:https://bennettfeely.com/clippy/
CSS Grid Generator 是一个 Grid 布局生成器,通过这个工具可以快速创建自定义CSS Grid布局。
官网:https://cssgrid-generator.netlify.app/
CSS Layout Generator 布局生成器可以为布局组件创建 CSS 和 HTML 的工具。
官网:https://layout.bradwoods.io/
Fluid-responsive font-size calculator 即响应式字体计算器,可以轻松创建流畅的排版体验。它有更广泛的支持,可以用几行 CSS 来实现。
官网:https://websemantics.uk/tools/responsive-font-calculator/
Regex101是学习、测试正则表达式的工具网站。
官网:https://regex101.com/
Regex-Vis 是一个正则表达式可视化器和编辑器。
官网:https://regex-vis.com/
Loupe 是一个可视化工具,可帮助我们了解 JavaScript 的调用堆栈/事件循环/回调队列是如何执行的。
官网:http://latentflip.com/loupe/
RunJS 是一个桌面应用程序,可帮助我们编写专门的 Javascript 和 Typescript 代码。它的一些优势是可以快速测试代码,轻松导入和测试库代码,并且能够修改界面、主题和字体以适应偏好。
官网:https://runjs.dev/
Wrap SVG Online 通过拖放从计算机上传图像,可以轻松地编辑网页的 SVG 图像。
官网:https://pavellaptev.github.io/warp-svg/
SVG Path Visualizer 可以帮助我们通过输入 SVG 路径数据来快速直观地查看 SVG 图像。此外,该工具还提供了详细的说明,以便了解如何创建基本的 SVG 形状,如直线、曲线、三角形等。
官网:https://svg-path-visualizer.netlify.app/
BGJar 是一个在线工具,可以轻松快速地为网站创建 SVG 背景。只需编辑必要的信息,它将自动导出图像或代码供我们应用到网站。
官网:https://bgjar.com/
Wavesnippets 可以将代码分步设置为动画、视频或 GIF。
官网:https://www.wavesnippets.com/
Generate SVG Waves 可以用来创建 SVG 波形背景。
官网:https://svgwave.in/
CodeSandbox 是一个为 Web 应用程序开发而构建的在线编辑器,支持多种主流框架。
官网:https://codesandbox.io/
Openbase 帮助开发人员在数以百万计的开源软件包中进行选择和使用。
官网:https://openbase.com/
CodePen 是一个在线的前端代码编辑工具,可用于制作测试页面、代码调试,所见即所得。
官网:https://codepen.io/
JSONLint 是一个 JSON 调试工具,如果遗漏了语法中的某些内容,它会进行检查。JSONLint 是处理大型 JSON 格式的绝佳工具,而且很容易上手。
官网:https://jsonlint.com/
Minifier 可以对 JavaScript 和 CSS 代码进行压缩,通过缩小可以提高网站加载速度。Minifier 通过删除 .js 和 .css 文件中的空白并重新格式化它们以减小大小。
官网:https://www.minifier.org/
Unminify 和 Minifier 恰恰相反。使用 Unminify 可以使 .js 或 .css 文件可读。这两种工具都非常容易使用。
官网:https://unminify.com/
CRADIENT.ART 是一个高级 CSS 渐变编辑器,使用带有分层、设计工具和免费云存储的功能丰富的编辑器设计插图、图案、图标等。
官网:https://gra.dient.art/
3DPop 可以使用 CSS 生成很棒的 3D 文本效果。
官网:https://textpop3d.web.app/
CSS Photo Filters 是一个CSS图片滤镜工具,提供了 36 个 CSS 过滤器供我们使用。
官网:https://baseline.is/tools/css-photo-filters/
在字符串查找处理程序中,正则表达式是一个不可忽略的处理方式。
我们能够利用正则表达式轻松地做到检索、替换那些符合某个模(规则)的字符串。
正则表达式有着很强的灵活性、逻辑性及功能性, 可以迅速地用极简单的方式达到字符串的复杂控制。
但对于初学者来说,比较晦涩难懂;再者,正则表达式在实际开发过程中使用不会很频繁。这样的情况下,每次遇到编写正则表达式处理问题时,就需要花费很多时间去调试验证我们的正则匹配模式。
今天,我们来分享一个正则表达式在线调试工具-regex101 。
regex101 是一个在线生成,测试及调试正则表达式的工具。
regex101 支持测试多种语言(PCRE,Python2.7, ECMAScript(JavaScript),Java,Go等)的正则表达式解析,提供高亮匹配公式、正则解析步骤分析、匹配详情等功能。
正则匹配测试
表达式编辑器中能够提示对应正则表达式含义,提示测试字符串匹配到的正则表达式,并且可以选择匹配模式修饰符。
多语言引擎支持
支持PCRE2,PCRE,ECMAScript(Javascript),Python2.7,Golang,Java8的正则表达式引擎解析。
正则表达式解析流程展示
字符串匹配详情
快速语法参考
代码生成工具
分享表达式链接
以上就是对regex101功能的基本使用说明, 通过以上对regex101的介绍,我们就可以使用regex101来调试我们的正则表达式了。
希望能给大家在学习工作中提供少许帮助,为大家在日常项目中提高使用正则表达式的效率。
参考:
https://regex101.com/
*请认真填写需求信息,我们会在24小时内与您取得联系。