2016-05-20 6 views
2

編集:私はFacebookのAPIを探していません!私は単に例としてFacebookを使っています。私はブラウザに、APIを持たない可能性のある異なるウェブサイト上でアクションを実行させるつもりです。一連のアクションを実行するためにウェブブラウザをプログラミングする方法は?

Facebookにログインし、友達リストを検索し、プロフィールのそれぞれを訪れ、各投稿の日付+テキストを抽出し、ファイルに書き込むプログラムを作成したいとしましょう。

私はアルゴリズムがどのように機能すべきか考えています。しかし、私は自分のコードとブラウザ自体をどのように結びつけるのか全く分かりません。

私はJavaプログラマです。Javaのpesudoコードは、ブラウザオブジェクトを作成して現在のページのコンテンツをHTMLコードに変換してデータを解析できるようにすることが非常に想像されます。私は以下のようなコードを提供しました。

しかし、私はそれを行うべきである正しい方法ですか?そうであれば、どこでWebブラウザオブジェクトを見つけることができますか?コンテンツを「読む」ために使用できるパーサーはありますか? 「好き」ボタンをクリックするなど、javascriptを実行するにはどうすればよいですか?

他の方法がありますか? GUI版はありますか?次に、X/Yピクセル位置に移動して何かをクリックするようにプログラムに指示することができます。あるいは、私のFireFoxの中に直接コードを書いてそこから実行する方法がありますか?

私は本当にこれを行う方法について手がかりがありません。どんな助けでも大歓迎です!ありがとう!

Browser browser = new Browser(); 
browser.goToUrl("http://facebook.com"); 

//Retrieve page in HTML format to parse 
HtmlPage facebookCom = browser.toHtml(); 

//Set username & password 
TextField username = facebookCom.getTextField("username"); 
TextField password = facebookCom.getTextField("password"); 
username.setText("user123"); 
password.setText("password123"); 
facebookCom.updateTextField("username", username); 
facebookCom.updateTextField("password", password); 

//Update HTML contents 
browser.setHtml(facebookCom); 

// Click the login button and wait for it to load 
browser.getButton("login").click(); 
while (browser.isNotLoaded()) { 
    continue; 
} 

// Click the friends button and wait for it to load 
browser.getButton("friends").click(); 
while (browser.isNotLoaded()) { 
    continue; 
} 

//Convert the current page (Friends List) into HTML code to parse 
HtmlPage facebookFriends = browser.toHtml(); 

//Retrieve the data for each friend 
ArrayList<XMLElement> friendList = facebookFriends.getXmlElementToArray("friend"); 
for (XMLElement friend : friendList) { 
    String id = friend.getId(); 

    //Visit the friend's page 
    browser.goToUrl("http://facebook.com/" + id); 
    while (browser.isNotLoaded()) { 
     continue; 
    } 

    //Retrieve the data for each post 
    HtmlPage friendProfile = browser.toHtml(); 
    ArrayList<XMLElement> friendPosts = friendProfile.getXmlElementToArray("post"); 

    BufferedWriter writer = new BufferedWriter(new File("C:/Desktop/facebook/"+id)); 

    //Write the date+text of every post to a text file 
    for (XMLElement post : friendPosts) { 
     String date = post.get("date"); 
     String text = post.get("text"); 

     String content = date + "\n" + text; 
     writer.append(content); 
    } 
} 
+1

この目的のAPIは – gonephishing

+0

Google "selenium"です。 –

+0

これにはブラウザの自動化ツールを使用して、アクティブなWebブラウザを効果的に制御し、その中のDOMとやりとりすることができます。しかし、Facebookから情報を入手しようと思っているのであれば、そのAPIを使わないのはなぜですか?または、少なくともコード内のHTTPリクエストを作成し、レスポンスを解析します。自動化されたタスクを実行するために手動ブラウザを制御することは少し不必要なようです。 – David

答えて

1

私はあなたが間違った方法を考えていると思います。あなたは本当にブラウザを介して画面をスクラップするプログラムを書こうとは思わないでしょう。 facebook rest apiを利用して、探しているデータを検索できるようです。 REST API経由でユーザーの投稿を取得するためのリンク:

https://developers.facebook.com/docs/graph-api/reference/v2.6/user/feed

あなたは、このエンドポイントからそのユーザーのIDの取得ができます

https://developers.facebook.com/docs/graph-api/reference/friend-list/

そして、その最初の残りのエンドポイントにユーザIDを差し込みますリンクされました。残りのAPIを介してデータが正しく返ってくると、そのデータをファイルに書き出すことはかなり簡単です。

+0

ありがとうございました!しかし、ここでは例としてFacebookを使っています。私はAPIを持たないWebサイトでこれを行うつもりです。 – user2296609

+0

ああ、これはあなたが探しているものよりも多分かもしれません: https://jsoup.org/cookbook/extracting-data/dom-navigation – cstopher

関連する問題