java实现百度站长平台网页链接批量提交(附源代码)

作者: 杨圣亮 分类: SEO工具 发布时间: 2018-10-26 23:09:29

我们这些站长们都想自己的网站在搜索引擎中有优异的表现,前十是现阶段的梦想,前三是终极梦想。做国内seo的朋友自然不愿意放过任何一个网页被百度索引的机会,没办法,谁让百度一家独大呢?

排名在后,收录在前,收录在后,抓取在前。要想被收录,就得先被抓取,抓取网页是前提,百度站长平台(ziyuan.baidu.com)提取了链接提交通道,不过不幸,手动提交,每次仅限20条url,对于一个稍大点的网站,每天产生的页面比较多,就比较麻烦了。虽然百度也提供了js自动提交的方式,但前提是该页面必须被访问才能触发提交行为,莫不是,每发布一篇,就得浏览一番,费劲啊。

有没有高效的办法呢?有的,百度也意识到上述问题,于是推出了api实时主动推送的服务,这个功能确实强大,可以将新发布的、未收录的网址链接收集起来,统统发给百度,通知蜘蛛尽快抓取,不过需要有编程能力才能实现。

作为一名会写些程序、又干过seo的我来说,并不是很难的问题,百度提供了post、curl、php、ruby四种调用接口的方式,惟独没有java,考虑到性能问题,决定使用java来写这个工具。既然百度没有提供,就只能自己动手了,参考了一下post的用例,直接用Java写了出来,经测试,可以实现批量提交。现将源代码公布出来,有需要的朋友可以拿去使用。环境为:java8,用到了alibaba的fastjson解析json数据,fastJson地址:https://github.com/alibaba/fastjson,将百度提供的提交状态异常提示信息转换成中文,直观易懂。源代码如下:

package com.yangshengliang.baidutuisong;

import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Vector;

/**
 * 百度未收录网页链接主动提交工具
 *
 * @author fedkey
 * @date 2018.10.25
 * @url www.yangshengliang.com
 */
public class PostUrls {

    private static String zzApiUrl = 接口调用地址; //从百度站长平台获取
    //返回状态码
    private final static int SUCESS_200 = 200;
    private final static int ERROR_400 = 400;
    private final static int ERROR_401 = 401;
    private final static int ERROR_404 = 404;
    private final static int ERROR_500 = 500;


    public static String postUrl(Vector<String> urls) throws IOException {
        URLConnection urlConnection;
        StringBuffer result = new StringBuffer();
        PrintWriter postPrintWriter = null;
        BufferedReader bufferedReader = null;
        int statusCode;
        try {
            urlConnection = new URL(zzApiUrl).openConnection();
            urlConnection.setRequestProperty("Content-Type", "text/plain");
            urlConnection.setRequestProperty("User-Agent", "curl/7.12.1");
            urlConnection.setRequestProperty("Host", "data.zz.baidu.com");
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);
            HttpURLConnection httpUrlConnection = (HttpURLConnection) urlConnection;
            postPrintWriter = new PrintWriter(httpUrlConnection.getOutputStream());
            //构造请求参数
            StringBuffer parm = new StringBuffer();
            for (String s : urls) {
                if (s != null) {
                    //去除两头空格
                    String tmpUrl = s.trim();
                    if (tmpUrl.contains("http://") || tmpUrl.contains("https://")) {
                        parm.append(tmpUrl);
                        parm.append("\n");
                    }
                }
            }
            //发送参数
            postPrintWriter.print(parm);
            //刷新输出流缓冲
            postPrintWriter.flush();
            statusCode = httpUrlConnection.getResponseCode();
            switch (statusCode) {
                case SUCESS_200:
                    if (statusCode == SUCESS_200) {
                        //通过BufferedReader输入流来读取Url的响应
                        bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                        String line;
                        while ((line = bufferedReader.readLine()) != null) {
                            result.append(line);
                        }
                    }
                    String resultT = result.toString();
                    if (result != null) {
                        JSONObject jsonObject = JSONObject.parseObject(resultT);
                        Object t = jsonObject.get("not_same_site");
                        Object successInt = jsonObject.get("success");
                        if(successInt.equals(0)){
                            result.delete(0, result.length());
                            result.append("提交失败,");

                        }else if (successInt.equals(1)){
                            result.delete(0, result.length());
                            result.append("提交成功");
                        }
                        if (t != null) {
                            result.append("接口调用地址与提交的网址不匹配");
                        }
                    }

                    break;
                case ERROR_400:
                    result.append("站点未在站长平台验证");
                    break;
                case ERROR_401:
                    result.append("接口调用地址 错误");
                    break;
                case ERROR_404:
                    result.append("接口地址填写错误");
                    break;
                case ERROR_500:
                    result.append("服务器偶然异常,通常重试就会成功");
                    break;

                default:
                    result.append("未知错误");
                    break;
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭流
            if (postPrintWriter != null) {
                postPrintWriter.close();
            }
            if (bufferedReader != null) {
                bufferedReader.close();
            }
        }
        return result.toString();
    }
}

对于不懂程序的朋友,可以留言,留言达到150,我就会抽时间来开发这款软件,并免费提供给大家。

5条评论
  • 七七

    2019年12月4日 下午5:38

    就服我大佬,继续关注大佬

    1. 杨圣亮

      2019年12月8日 下午7:02

      谢谢了

  • 匿名

    2019年12月4日 下午5:37

    就服我大佬,耐心,人好,持续关注大佬

  • 我是小蒙

    2019年1月18日 上午8:40

    大神,太牛逼了。关注你很久了,可以交个朋友吗?

    1. 杨圣亮

      2019年1月18日 上午8:45

      不敢当大神,可以的,请加我qq吧

回复 杨圣亮 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

66  +    =  73

微信