0

Twitter で残りの API を使用すると、サーバーは限られた量のツイートのみを提供します。APIで提案されている方法であるmax_idでループして、ユーザー履歴を取得しようとしています。ただし、呼び出しごとに新しい xml ヘッダーを取得し、SAX パーサー エラーをスローしているため、max_id を取得できません。Transformer の Java API と OMIT_XML_DECLARATION を調べましたが、接続、印刷メソッド、またはドキュメントの処理時に xml 宣言を削除する必要があるかどうか、コードのどこに配置すればよいかわかりません。Transformer の出力を理解できませんでした...詳細に調べましたが。

public class DataGrabber {

File destFile;
int qcount = 0;

public void getRuserHx() throws ParserConfigurationException, IOException, InterruptedException, SAXException {
        int downNodes = 0;
        Integer statTot = 10;
        String maxId = null;

        File filename = new File(MyIds.hoopoeData + "/" + MyIds.rootUser + "Hx.xml");

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc;


            //loop and download based on the id of the last tweet
            while(downNodes < statTot){
             System.out.println("Getting user status history...");
             String filex = MyIds.rootUser + "Hx.xml";
             String https_url = "https://twitter.com/statuses/user_timeline.xml?screen_name=" + MyIds.rootUser + "&count=300";
             makeConnection(https_url, filex);

             //validate the xml before you parse
             doc = builder.parse(filename); 
             doc.getDocumentElement().normalize();

             //set up for the loop           
             downNodes = HooUtil.nodeCount(filename, "status");
             statTot = Integer.parseInt(HooUtil.nodeValue(filename, "user", "statuses_count", 0));

             Long loopMax = (Long.valueOf(HooUtil.nodeValue(filename, "status", "id", downNodes - 1)) - 1);
             maxId = loopMax.toString();
             https_url = "https://twitter.com/statuses/user_timeline.xml?screen_name=" + MyIds.rootUser + "&count=300&max_id=" + maxId;
             Thread.sleep(4000);
             qcount ++;
            }


        System.out.println("Finished downloading user status history.");

  }

    //connect with the input query
public void makeConnection(String https_url, String filex){
    URL url;
    try {     
         url = new URL(https_url);
         HttpsURLConnection con = (HttpsURLConnection)url.openConnection();          
         //dump all the content into an xml file
         print_content(con, filex);

    } 
    catch (MalformedURLException e) {
         e.printStackTrace();
    } 
    catch (IOException e) {
         e.printStackTrace();
    }

}

    //the print method for the xml file
private void print_content(HttpsURLConnection con, String filex){

    if(con!=null){

        try {           
           BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));

              destFile = new File("/" + filex);
              PrintWriter out = new PrintWriter(new FileWriter(MyIds.hoopoeData + destFile, true)); 
              String input;
              while ((input = br.readLine()) != null){
              out.println(input);
        }

           out.flush();
           out.close();
           br.close();  

        } 
        catch (IOException e) {
           e.printStackTrace();
        }   

    }
4

0 に答える 0