Esempio n. 1
0
 public static void main(String[] args) {
   String access_token = args[0];
   Timeline tm = new Timeline();
   tm.client.setToken(access_token);
   try {
     StatusWapper status = tm.getHomeTimeline();
     for (Status s : status.getStatuses()) {
       Log.logInfo(s.toString());
     }
     System.out.println(status.getNextCursor());
     System.out.println(status.getPreviousCursor());
     System.out.println(status.getTotalNumber());
     System.out.println(status.getHasvisible());
   } catch (WeiboException e) {
     e.printStackTrace();
   }
 }
  /** 本线程每 ??秒?分钟 执行一次 为每个uid 抓取(10-99)条最新微博 不重复的插入数据库和缓存 */
  @Override
  public void run() throws NullPointerException {

    while (true) {
      // TODO 通过uid 获取该uid的微博 并且插入数据库,插不重复的数据 page 从1开始
      // since_id false int64
      // 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。
      // max_id false int64 若指定此参数,则返回ID小于或等于max_id的微博,默认为0。
      // 是id 经测试 长的mid和短的id都可以作为参数
      // 这里用id(短的)非mid 作为statusBean的微博id
      Timeline timeline = new Timeline();
      timeline.client.setToken(access_token);
      StatusWapper statusWapper = null;

      String autherUid = "1197161814";

      // wid: 3514156970081400
      try { // 最多200条					    //uid  1193491727             取200+条  200-300
        statusWapper = timeline.getRepostTimeline("3514176795867274", new Paging(2, 199));
      } catch (WeiboException e) {
        e.printStackTrace();
      }
      // 经测试发现
      // 通过wid查询转发,返回的StatusWapper包的Status里获取的每个status的getUser就是这个转发的人的信息
      List<Status> status = statusWapper.getStatuses();
      System.out.println("status.size: " + status.size());
      for (int i = 0; i < 150; i++) { // 先取5个status
        System.out.println("第 i: " + i + " 个status的被转发次数:" + status.get(i).getRepostsCount());
        // 只要在这个 status集合里的肯定在数组的0位,肯定放入了
        try {
          userDeep[i][9][9] = status.get(i).getUser().getScreenName();
        } catch (NullPointerException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
        if (status.get(i).getRepostsCount() == 0) {
          try {
            System.out.println("首次被转发次数是  0,转发的人是: " + status.get(i).getUser().toString());
          } catch (NullPointerException e) {
            e.printStackTrace();
          }
          continue;
        } else { // 超过1个人转发

          // for (int j = 0; j < count; j++) {// 尼玛 逻辑乱出翔
          StatusWapper statusWapper1 = null;
          System.out.println("weibo ID:-->  " + status.get(i).getId()); // 显示下
          // 当前被转发的转发微博的
          // id
          try {
            statusWapper1 = timeline.getRepostTimeline(status.get(i).getId(), new Paging(1, 100));
          } catch (WeiboException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          List<Status> status1 = statusWapper1.getStatuses();
          int count1 = status1.size();
          if (count1 > 5) {
            count1 = 5;
            System.out.println("深度为   二   第   超过超过超过5    ");
          }

          for (int k = 0; k < count1; k++) { // 深度为2
            System.out.println(
                "深度为   二   第k: " + k + "个status1的被转发次数:" + status1.get(k).getRepostsCount());
            //						userDeep[i][1] = status1.get(k).getUser().getScreenName();
            if (status1.get(k).getRepostsCount() == 0) {
              System.out.println(
                  "首次被转发次数是  1,转发的人是: "
                      + status.get(i).getUser().toString()
                      + "二次被转发的次数为0,转发的人是: "
                      + status1.get(k).getUser().toString());
              continue;
            } else if (
            /* status1.get(k).getRepostsCount() == 1 && */ isGz(
                autherUid, status1.get(k).getUser().getId())) {
              System.out.println(
                  "首次被转发次数是  1(但是关注作者),深度是  1,转发的人是: "
                      + status.get(i).getUser().toString()
                      + "二次被转发次数是1,深度是2,转发的人是:"
                      + status1.get(k).getUser().toString());
              continue;
            } else { //  被转发 而且没有关注作者
              userDeep[i][k][9] = status1.get(k).getUser().getScreenName();
              // 遍历转发此 转发微博的 人数
              // for(int l = 0;l<count2;l++){
              StatusWapper statusWapper2 = null; // 深度为3
              try {
                statusWapper2 =
                    timeline.getRepostTimeline(status1.get(k).getId(), new Paging(1, 100));
              } catch (WeiboException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
              }
              List<Status> status2 = statusWapper2.getStatuses();
              int count3 = status2.size();
              if (count3 > 5) {
                count3 = 5;
                System.out.println("深度为    三    size 超过超过超过5    ");
              }
              for (int m = 0; m < count3; m++) {
                //								userDeep[i][2] = status2.get(m).getUser().getScreenName();
                System.out.println(
                    "深度为  三   第m:" + m + "个status2的杯转发次数是:" + status2.get(m).getRepostsCount());
                if (status2.get(m).getRepostsCount() == 0) {
                  System.out.println(
                      "首次被转发次数是  1,转发的人是: "
                          + status.get(i).getUser().toString()
                          + "二次被转发的次数为0,转发的人是: "
                          + status1.get(k).getUser().toString()
                          + "三次杯转发次数为0,转发的人是: "
                          + status2.get(m).getUser().toString());
                } else if (isGz(autherUid, status2.get(m).getUser().getId())) {
                  System.out.println(
                      "首次被转发次数是  1 (但是关注作者),深度是  1,转发的人是: "
                          + status.get(i).getUser().toString()
                          + "二次被转发次数是1,深度是2,转发的人是:"
                          + status1.get(k).getUser().toString()
                          + "三次转发次数是1,转发的人是: "
                          + status2.get(m).getUser().toString());
                } else {
                  userDeep[i][k][m] = status2.get(m).getUser().getScreenName();
                  System.out.println(
                      "深度为  --3--  的转发者 --> 首先0次转发人是 :"
                          + status.get(i).getUser().toString()
                          + "   -->2次转发人是: "
                          + status1.get(k).getUser().toString()
                          + "    --->3次转发人是 : "
                          + status2.get(m).getUser().toString());
                }
              }
            }
          }
        }

        // System.out.println("当前转的id: " + status.get(i).getId());
        // System.out.println("原id :"+
        // status.get(i).getRetweetedStatus().getId());
        // System.out.println("转发者 :"+status.get(i).getUser().toString());//
        // 转发者属性
        // System.out.println("source: "+status.get(i).getSource()); //
        // 来源
        // System.out.println("转发的status: "+status.get(i).getRetweetedStatus().toString());//
        // 转发的status
      }

      //			for (int i = 0; i < userDeep.length; i++) {
      //				if (userDeep[i][0] != null) {
      //					System.out.print(i + ": ");
      //					for (int j = 0; j < userDeep[i].length; j++) {
      //						if (userDeep[i][j] != null) {
      //							System.out.print(userDeep[i][j] + " <-- ");
      //						}
      //					}
      //					System.out.println();
      //				}
      //			}
      // 让数组的9 放 父节点信息
      for (int i = 0; i < userDeep.length; i++) {
        if (userDeep[i][9][9] != null) {
          System.out.print(i + ": lv-1-" + userDeep[i][9][9]);
          for (int j = 0; j < userDeep[i].length - 2; j++) {
            if (userDeep[i][j][9] != null) {
              System.out.print("             <-- lv-2- " + userDeep[i][j][9]);
              for (int k = 0; k < userDeep[i][j].length - 2; k++) {
                if (userDeep[i][j][k] != null) {
                  System.out.println("         <-- lv-3- " + userDeep[i][j][k]);
                }
              }
              System.out.println();
            }
          }
          System.out.println();
        }
      }

      // 1s = 1000ms 1min = 60*1000 = 60000
      sleep(6000 * 1000);
    }
  }