百度推送-sitemap-使用playframework框架实现-java
主动推送的目的是能够把我们高质量内容推送给百度,但是首先你得有一个属于你自己的网站,在百度站长进行验证通过之后,才有资格推送百度sitemap。
百度站长平台为未使用百度统计的站点提供三种验证方式:文件验证、html标签验证、CNAME验证。
1.文件验证:您需要下载验证文件,将文件上传至您的服务器,放置于域名根目录下。
2.html标签验证:将html标签添加至网站首页html代码的<head>标签与</head>标签之间。
3.CNAME验证:您需要登录域名提供商或托管服务提供商的网站,添加新的DNS记录。
我选择的是第一种方式,详细资料在http://zhanzhang.baidu.com/college/courseinfo?id=267&page=1这是百度官方给出的课件。
验证通过之后选择链接提交方式,我选择了主动推送和sitemap两种,当然最快的是推送方式,主动推送,最为快速的提交方式,建议您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
公司用的框架是Play Framework 是一个纯 Java 的框架,所以我们选择post推送,然后我们看一下百度(baidu)给我们提供的推送接口如下:
POST /urls?site=www.caizhuojie.com&token=edk7ychrEZP9pDQD HTTP/1.1
User-Agent: curl/7.12.1
Host: data.zz.baidu.com
Content-Length: 83
http://www.example.com/1.html
http://www.example.com/2.html
进入我们主题,实现post 推送代码如下:
package jobs; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import models.Game; import models.enums.Bool; import play.Play; import play.jobs.Job; import play.jobs.On; import play.libs.WS; import play.libs.WS.HttpResponse; import play.libs.WS.WSRequest; //这里是框架中自带的定时任务,要创建一个sitemap,只需要简单地继承play.jobs.Job类就可以设置每天晚上23:00启动一次 @On("0 0 23 * * ?") public class SiteMap extends Job { public static String url = "http://data.zz.baidu.com/urls?site=www.caizhuojie.com&token=******"; // token这边百度提供 public void doJob() throws Exception { // 这里是框架中的一个判断,在正式环境中才会运行,在测试环境中不会触发,以保证不会重发推送。 if ("prod".equals(Play.id)) { Calendar calendar = Calendar.getInstance(); Date currentData = calendar.getTime(); calendar.add(Calendar.DAY_OF_MONTH, -1); Date lastDate = calendar.getTime(); // 查询出数据库中的游戏数据id拼接起来,这就是我们要推送的链接,(注意拼接最后加上 换行‘\n’) List<String> newResult = Game.find( "SELECT CONCAT('http://www.yiyoushuo.com/g',game.id,'\n') FROM Game AS game "// + "where game.issueStatus=? and game.adoptTime > ? and game.adoptTime < ?", Bool.TRUE, lastDate, currentData).fetch(); // 查询中加入条件,查出当前时间至前一天此时时间所产生的新游戏id,满足每天更新推送。 StringBuilder sb = new StringBuilder(); for (String string : newResult) { sb.append(string); } // 下面就是在play framework框架下的post请求。 WSRequest request = WS.url(url); request.body = sb.toString(); HttpResponse response = request.post(); JsonElement json = response.getJson(); JsonObject asJsonObject = json.getAsJsonObject(); JsonElement success = asJsonObject.get("success"); JsonElement remain = asJsonObject.get("remain"); System.out.println( "响应:" + response.getStatus() + "success:" + success.getAsInt() + "remain:" + remain.getAsInt()); } } }
成功则会返回
在此附上可能出现的异常情况的返回码信息,供调试用:
200 无使用方式错误,需要进一步观察返回的内容是否正确
400 必选参数未提供
405 不支持的请求方式,我们只支持POST方式提交数据
411 HTTP头中缺少Content-Length字段
413 推送的数据过大,超过了10MB的限制
422 HTTP头中Content-Length声明的长度和实际发送的数据长度不一致
500 站长平台服务器内部错误
关于百度Sitemap协议支持三种格式:文本格式、xml格式、Sitemap索引格式,可以根据自己情况来选择任意一种格式组织sitemap。
本人所用的是第二种xml格式:
<?xml version="1.0" encoding="utf-8"?>
<!-- XML文件需以utf-8编码-->
<urlset>
<!--必填标签-->
<url>
<!--必填标签,这是具体某一个链接的定义入口,每一条数据都要用<url>和</url>包含在里面,这是必须的 -->
<loc>http://www.yoursite.com/yoursite.html</loc>
<!--必填,URL链接地址,长度不得超过256字节-->
<lastmod>2017-03-19</lastmod>
<!--可以不提交该标签,用来指定该链接的最后更新时间-->
<changefreq>daily</changefreq>
<!--可以不提交该标签,用这个标签告诉此链接可能会出现的更新频率 -->
<priority>1.0</priority>
<!--可以不提交该标签,用来指定此链接相对于其他链接的优先权比值,此值定于0.0-1.0之间-->
</url>
<url>
<loc>http://www.yoursite.com/yoursite.html</loc>
<lastmod>2017-03-19</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
</urlset>
上述Sitemap向百度提交了一个url:http://www.yoursite.com/yoursite.html
import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.XMLWriter; import models.Game; import models.enums.Bool; public class SiteMapService { public static String url ="http://data.zz.baidu.com/urls?site=www.caizhuojie.com&token=******"; public static String getFileTimeStamp() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = sdf.format(new Date()); return dateString; } public static void pushAll() { List<String> resultGame = Game .find("SELECT CONCAT('http://www.yiyoushuo.com/g',game.id,'\n') FROM Game AS game "// + "where game.issueStatus=?", Bool.TRUE) .fetch(); StringBuilder sb = new StringBuilder(); try { // 创建文件 Document document = DocumentHelper.createDocument(); // 生成根节点 Element urlset = document.addElement("urlset"); for (String string : resultGame) { sb.append(string); Element url = urlset.addElement("url"); Element loc = url.addElement("loc"); Element priority = url.addElement("priority"); Element lastmod = url.addElement("lastmod"); Element changefreq = url.addElement("changefreq"); loc.setText(string.replaceAll("\n", "")); priority.setText("1.0"); lastmod.setText(getFileTimeStamp()); changefreq.setText("Always"); } FileWriter writer = new FileWriter("sitemap.xml"); XMLWriter xmlWriter = new XMLWriter(writer); xmlWriter.write(document); xmlWriter.close(); } catch (IOException e) { e.printStackTrace(); } } }
程序运行之后生成一个sitemap.xml文件在网站根目录,进入自己的站点再手动添加进去即可。
如果朋友有兴趣的话,可以参考,谢谢。
百度推送-sitemap-使用playframework框架实现-java的更多相关文章
- iOS开发三步搞定百度推送
iOS开发三步搞定百度推送 百度推送很简单,准备工作:在百度云推送平台注册应用,上传证书. 步骤一: 百度云推送平台 http://push.baidu.com/sdk/push_client_s ...
- ios8中百度推送接收不到
ios8中百度推送接收类型会有所改变: //消息推送注冊 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { ...
- iOS百度推送的基本使用
一.iOS证书指导 在 iOS App 中加入消息推送功能时,必须要在 Apple 的开发者中心网站上申请推送证书,每一个 App 需要申请两个证书,一个在开发测试环境下使用,另一个用于上线到 App ...
- C# 简单的百度推送代码
前段时间搞推送来着,安卓方面用到了百度的推送服务,由于只是简单的用到安卓推送的通知功能,所以没用百度推荐的C# SDK,通过借鉴网上的各种资料和百度的API,费了老大劲终于折腾出来一段能用的代码(早知 ...
- 【Azure 环境】Azure通知中心(Notification Hub)使用百度推送平台解说
问题描述 在通知中心的页面中显示支持BaiDu,介绍一下支持的是百度(Baidu)的什么吗?Azure的这个功能在国内使用的时候是否可以保证国内安卓手机的信息送达率? 问题解答 通知中心的页面中的Ba ...
- iOS推送 (百度推送)
近期在使用推送,所以与大家分享一下我所遇到的问题,与解决这个问题的方法.! 1.首先生成CertificateSigningRequest文件. 点击钥匙串訪问-->从证书颁发机构请求证书--& ...
- 在ThinkPHP3.x框架中实现将原创文章第一时间推送到百度收录
前两天自己写的一篇文章“针对BootStrap中tabs控件的美化和完善”被别的网站给转载了,这也许是值得高兴的一件事情,但是有些网站并没有注明来源和作者.而去百度搜索这篇文章,排名第一的居然是那些转 ...
- 百度云推送-服务端 C# SDK
思路: 1.公司有项目需要做android和ios手机端推送消息的功能: 2.没有接触过这方面的知识,一头雾水,开始在网上一顿搜,网上倒是有不少解决方案,首先搜的是android的解决方案,因为ios ...
- 改写百度云推送SDK,PHP PEAR 包:Services_Baidu_Push
iPhone使用apple push很方便,而Android很多厂商删除了google push,而且google在大陆连不上,所以要用别的办法. Android常见的推送服务商有:极光推送(http ...
随机推荐
- SDWebImage源码解读之干货大总结
这是我认为的一些重要的知识点进行的总结. 1.图片编码简介 大家都知道,数据在网络中是以二进制流的形式传播的,那么我们该如何把那些1和0解析成我们需要的数据格式呢? 说的简单一点就是,当文件都使用二进 ...
- 开源OSS.Social微信项目解析
前言:OSS.Social是个开源的社交网站接口集成项目,当前也有很多其他不错的项目,不过始终没有我想要的那种简单清晰,只能撸起袖子,从头打造一个.当前正在进行的是对微信项目的开发,这里把对接口的整 ...
- Superwebsocket 模拟微信聊天室
在园子里潜水几年了,工作以来算是有些积累,突然想写点东西方便以后温故而知新,希望自己能够坚持下去. 关于Superwebsocket的介绍我就不多说了,请点击:http://www.cnblogs.c ...
- Robot Framework和Selenium 2 Grid集成指南
1. 环境搭建 A. 所需软件 1. Selenium2Lib 1.0.1 这个特性需要用到Selenium2Lib的最新版本1.0.1,但是这个版本还有一些iframe支持和IE支持的问题需要修改, ...
- DFS 分布式文件系统 选型笔记
需求按优先级顺序如下: 1)存放3TB以上中小型文件,图片为主,平均在500~700k,一般在1M以内. 2)要集群化,支持负载均衡,高可用高性能.有大企业使用背书最好. 3)提供Java程序上传文件 ...
- HTML中三种定位relative,absolute,fixed后,盒子的百分比宽度及位置易错点
1 . 相对定位relative:顾名思义,相对定位是相对于自己的位置来进行偏移,如下图: 以盒子中心为基准,为每条边的正方向,例: 向右移动20px : 代码为left:20px;或者right:- ...
- enote笔记语言(3)(ver0.2)
what&why(why not)&how&when&where&which:紫色,象征着神秘而又潜蕴着强大的力量,故取紫色. key&keyword: ...
- 使用Python实现子区域数据分类统计
目录 前言 geopandas简介 子区域数据分类统计 总结 一.前言 最近碰到一个需求,需要统计某省内的所有市的某数据分布情况信息.现有该省的数据分布情况以及该省的行政区划数据.我通过 ...
- 第一章 Java语言概述2
一.编写第一个Java应用程序 1.下载.安装JDK 官方网址:www.oracle.com java.sun.com 安装JDK 傻瓜式安装,下一步即可. 建议:安装路径不要有中文或者特殊符号,如空 ...
- 使用jQuery操作DOM
一.DOM操作分为3类 1.DOM Core DOM Core不是Javascript的专属品,任何一种支持DOM的编程语言都可以使用它.它的用途不仅限于处理一种使用标记语言编写出来的文档 2.HTM ...