原创

Java 以 Post 方式实现百度 Sitemap 实时推送

Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站。


百度提供了多种链接提交方式如下:

1、主动推送:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。

2、sitemap:您可以定期将网站链接放到sitemap中,然后将sitemap提交给百度。百度会周期性的抓取检查您提交的sitemap,对其中的链接进行处理,但收录速度慢于主动推送。

3、手工提交:一次性提交链接给百度,可以使用此种方式。


post 推送示例:

POST /urls?site=www.yoodb.com&token=wkkpNynvtltDW347 HTTP/1.1
User-Agent: curl/7.12.1 
Host: data.zz.baidu.com 
Content-Type: text/plain 
Content-Length: 83 
http://www.example.com/1.html
http://www.example.com/2.html


下面为大家讲述一下 Java 以 Post 方式实现百度 Sitemap 实时推送,具体代码如下:

package com.yoodb.util;

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.Arrays;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;

public class PushSiteMapUtil {

	/**
	 * 推送 Stiemap 到百度
	 * @param url
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static boolean push(String url){
		String urlPath = "http://data.zz.baidu.com/urls?site=www.yoodb.com&token=xreflkjfasD";
		try {
			String re = postHttp(urlPath, Arrays.asList(url));
			System.out.println(re);
			Map map = new Gson().fromJson(re, Map.class);
	    	if(map.get("success") !=null && !map.get("success").equals("")){
	    		return true;
	    	}
		} catch (Exception e) {
			return false;
		}
		return false;
	}
	
	/** 
     * 百度链接实时推送 
     * @param postUrl 
     * @param params 
     * @return 
     */  
    private static String postHttp(String url,List<String> params){  
        if(null == url || null == params || params.isEmpty()){  
            return null;  
        }  
        String result = "";  
        PrintWriter out = null;  
        BufferedReader in = null;  
        try {  
            URLConnection conn=new URL(url).openConnection();// 建立URL之间的连接  
            conn.setRequestProperty("Host","data.zz.baidu.com");// 设置通用的请求属性  
            conn.setRequestProperty("User-Agent", "curl/7.12.1");  
            conn.setRequestProperty("Content-Length", "83");  
            conn.setRequestProperty("Content-Type", "text/plain");  
            conn.setDoInput(true);// 发送POST请求必须设置如下两行
            conn.setDoOutput(true);  
            out = new PrintWriter(conn.getOutputStream());// 获取conn对应的输出流  
            String param = "";// 发送请求参数 
            for(String s : params){  
                param += s + "\n";
            }  
            out.print(param.trim());  
            out.flush();  
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
            String line;  
            while((line=in.readLine())!= null){  
                result += line;  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally{  
            try{  
                if(out != null) 
                    out.close();  
                if(in!= null) 
                    in.close();    
            }catch(IOException ex){  
                ex.printStackTrace();  
            }  
        }  
        return result;  
    }  
    
}

测试代码如下:

public static void main(String[] args) {
    	boolean re = PushSiteMapUtil.push("http://blog.yoodb.com/yoodb/article/detail/1074");
    	System.out.println(re);
}

输出结果如下:

{"remain":493,"success":1}
true


推送成功

状态码为200,可能返回以下字段:

字段是否必选参数类型说明
successint成功推送的url条数
remainint当天剩余的可推送url条数
not_same_sitearray由于不是本站url而未处理的url列表
not_validarray不合法的url列表

成功返回示例:

{
    "remain":4999998,
    "success":2,
    "not_same_site":[],
    "not_valid":[]
}

推送失败

状态码为4xx,返回字段有:

字段是否必传类型说明
errorint错误码,与状态码相同
messagestring错误描述

失败返回示例:

{
    "error":401,
    "message":"token is not valid"
}

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

分享:

支付宝

微信