【玩转微信公众平台之十】 图文消息回复解说

我们回复用户的消息类型有多种,能够是简单的文字回复。也能够是音乐回复,或者是图文信息回复(不能仅仅回复一张图片,一定要夹带着文字)。为什么本篇我就仅仅将图文回复呢?原因有多个:
1、音乐回复我没搞过;
2、文字回复前一篇说过;
3、图文回复个人认为偏难了点,所以重点讲。
4、博主又要凑博客篇数了...(没错,答对了)


--------------------------
1、在開始解说图文消息回复之前。我要补讲一些东西:在演示样例代码解说的那篇博客里。我以下这段代码跳过去了:
$textTpl = "<xml>
			<ToUserName><![CDATA[%s]]></ToUserName>
			<FromUserName><![CDATA[%s]]></FromUserName>
			<CreateTime>%s</CreateTime>
			<MsgType><![CDATA[%s]]></MsgType>
			<Content><![CDATA[%s]]></Content>
			<FuncFlag>0</FuncFlag>
			</xml>";

$textTpl这货怎么看起来如此眼熟?没错,我们在回复用户的文字消息( 注意是文字消息)时,都会用到它,如以下这句:
$msgType = "text";
$contentStr = "感谢您的关注。回复“1”查看博主ID;回复“2”查看博主爱好";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;

它的作用就是将我们要发给用户的文字消息合成为xml格式文本,这个文本里包括用户的OpenID,公众号的ID,系统时间,消息类型。回复的文字内容。那么。什么是xml格式呢?

XML是一种简单的数据存储语言。它要求每个标签都有開始和结束标记。能够进行嵌套,它里面的每个字段(就是每种信息)都必须以<>开头。</>结尾,例如以下:
<xml>
<content>
<id>博主ID</id>
<age>博主年龄</age>
</content>
</xml>
xml简单分析到这里。 以下回过头来继续看$textTpl这个变量
$textTpl = "<xml>//这里表明是xml格式
			<ToUserName><![CDATA[%s]]></ToUserName>//存储微信公众号的ID
			<FromUserName><![CDATA[%s]]></FromUserName>//存储用户OpenID
			<CreateTime>%s</CreateTime>//存储系统时间
			<MsgType><![CDATA[%s]]></MsgType>//存储消息类型
			<Content><![CDATA[%s]]></Content>//存储要发送到消息内容
			<FuncFlag>0</FuncFlag>//是否星标(别管这个)
			</xml>";

恩,上面的代码凝视还算比較好理解吧, 可能唯一不理解的就是[CDATA[%S]]这货是什么玩意,CDATA表示不转义,不理解也没事,主要还是看%s,它表示要转换成字符串的数据类型。翻译成白话文就是%s表示一个刚出生的婴儿。这个婴儿的类型的字符串类型(能够理解为女的)。我们都知道婴儿刚出生时所有信息都是一片空白。没有姓名,没有户口之类的,这就是%s的含义,表示一片空白。等待你来开发如以下这句:
<Content><![CDATA[%s]]></Content>
此时Content里是没有内容的。所以就须要我们来传送内容进入,怎么传呢?用 sprintf()这个函数。它的格式例如以下:
sprintf(baby,$name,$country,...);
第一个參数baby表示将要被传送内容的xml格式变量(婴儿),将$name传给baby中第一个出现%s的位置,将$country传给第2个出现%s的位置,以此类推



最后我们再回过头来看下这句:

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
是不是知道怎么回事了? $textTpl就是xml格式变量,接下来将$fromUsername传给textTpl,然后是tuUsername,然后...,最后将全新的textTpl传给resultStr这个变量。然后发送给用户。

2、以下进入正题,怎样回复图文消息。

以下是回复图文消息的一些格式:

        

也能够点击这个链接查看: 点击打开链接

上面描写叙述的非常具体了, 这里须要注意单图的时候会显示描写叙述(Descripition),而多图不会显示描写叙述。

第一张为item大图。像素为640x320,以下的item图片为小图,像素为80x80,Url为图片的链接。所以在这之前我们须要事先将图片上面到SAEserver上(要不然你图片的链接哪来?)。


以下我先搞个回复单图的模式,先配置图文消息的xml,相似文本消息的$textTpl。
$imageTpl = "<xml>
			<ToUserName><![CDATA[%s]]></ToUserName>
			<FromUserName><![CDATA[%s]]></FromUserName>
			<CreateTime>%s</CreateTime>
			<MsgType><![CDATA[news]]></MsgType>//消息类型为news(图文)
			<ArticleCount>1</ArticleCount>//图文数量为1(单图文)
			<Articles>
			<item>//第一张图文消息
			<Title><![CDATA[%s]]></Title> //标题
			<Description><![CDATA[]]></Description>//描写叙述为空(懒得描写叙述)
			<PicUrl><![CDATA[%s]]></PicUrl>//打开前的图片链接地址
			<Url><![CDATA[%s]]></Url>//点击进入后显示的图片链接地址
			</item>
			</Articles>
			</xml> ";

好了。图文消息的回复模板已经搞好了,接下来就是将图片消息的标题。图片等信息填满了。代码例如以下:
$title = "哎呦我去,又下雨了";//标题
$PicUrl = "http://1.star530.sinaapp.com/weather.jpg";//图片链接
$Url = "http://1.star530.sinaapp.com/weather.jpg";//打开后的图片链接
$resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $title, $PicUrl,$Url);
echo $resultStr;
执行效果例如以下:


恩,就是这样,完整的代码例如以下:
public function responseMsg()
    {
		//get post data, May be due to the different environments
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];


      	//extract post data
		if (!empty($postStr)){
                
              	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "<xml>
							<ToUserName><![CDATA[%s]]></ToUserName>
							<FromUserName><![CDATA[%s]]></FromUserName>
							<CreateTime>%s</CreateTime>
							<MsgType><![CDATA[%s]]></MsgType>
							<Content><![CDATA[%s]]></Content>
							<FuncFlag>0</FuncFlag>
							</xml>";     
					
				$imageTpl = "<xml>
							<ToUserName><![CDATA[%s]]></ToUserName>
							<FromUserName><![CDATA[%s]]></FromUserName>
							<CreateTime>%s</CreateTime>
							<MsgType><![CDATA[news]]></MsgType>//消息类型为news(图文)
							<ArticleCount>1</ArticleCount>//图文数量为1(单图文)
							<Articles>
							<item>//第一张图文消息
							<Title><![CDATA[%s]]></Title> //标题
							<Description><![CDATA[]]></Description>//描写叙述为空(懒得描写叙述)
							<PicUrl><![CDATA[%s]]></PicUrl>//打开前的图片链接地址
							<Url><![CDATA[%s]]></Url>//点击进入后显示的图片链接地址
							</item>
							</Articles>
							</xml> ";
			
				if(!empty( $keyword ))
                {
					$title = "哎呦我去,又下雨了";//标题
					$PicUrl = "http://1.star530.sinaapp.com/weather.jpg";//图片链接
					$Url = "http://1.star530.sinaapp.com/weather.jpg";//打开后的图片链接
					$resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $title, $PicUrl,$Url);
					echo $resultStr;
                }else{
                	echo "Input something...";
                }
				
        }else {
        	echo "";
        	exit;
        }
    }
}

好了,就这样。

本来是安排一周的时间将微信这个系列教程写完的,结果由于各种原因仅仅完毕了十篇。

所以呢。就先写到这吧,等下次有抽空再继续吧...

后会有期~~

尊重原创。转载请注明来源:http://blog.csdn.net/star530/article/details/26139129
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值