2011-09-23 84 views
1

我正在製作一個Web應用程序,它返回Twitter追隨者的Klout分數詳細信息。該工作流程如下:從Klout API解析JSON到Java的

  1. 從Twitter的API,讓追隨者twitter_id。例如:Sachin Tendulkar追隨者的48,000個ID。
  2. 獲取Twitter的信息(網名,twitter_name,位置)從第1步
  3. 收到Klout的API twitter_id,得到的Klout分數JSON格式,然後JSON解析成Java。
  4. Klout的API,得到JSON格式Klout的主題,然後JSON解析成Java。
  5. 將Klout和Twitter數據插入數據庫。

我的JSON解析成Java面臨的問題。請建議解決方案。 在此先感謝。
Komal

回答

0

看看Direct Media Tips and Tricks書的Setting up a Klout application部分。它解釋瞭如何使用dmt-klout庫來獲取您正在查找的信息。

如果要重寫庫,可以查看源代碼。 dmt-klout庫依賴於json.org類來解析JSON響應。例如:

public User(JSONObject json) { 
    nick = json.getString("nick"); 
    id = new UserId(json.getString("kloutId")); 
    JSONObject scores = json.getJSONObject("score"); 
    bucket = scores.getString("bucket"); 
    score = scores.getDouble("score"); 
    JSONObject scoreDeltas = json.getJSONObject("scoreDeltas"); 
    dayChange = scoreDeltas.getDouble("dayChange"); 
    weekChange = scoreDeltas.getDouble("weekChange"); 
    monthChange = scoreDeltas.getDouble("monthChange"); 
} 

在這種情況下json是使用查詢用戶時返回的String創建JSONObject。這User類也可用於影響查詢:

public List<Topic> getTopics(UserId id) throws IOException { 
    List<Topic> topics = new ArrayList<Topic>(); 
    JSONArray array = new JSONArray(KloutRequests.sendRequest(String.format(
      KloutRequests.TOPICS_FROM_KLOUT_ID, getUserId(id).getId(), apiKey))); 
    int n = array.length(); 
    for (int i = 0; i < n; i++) { 
     topics.add(new Topic(array.getJSONObject(i))); 
    } 
    return topics; 
} 

Topic類的構造函數如下所示:

public Topic(JSONObject json) { 
    id = json.getLong("id"); 
    name = json.getString("name"); 
    displayName = json.getString("displayName"); 
    slug = json.getString("slug"); 
    displayType = json.getString("displayType"); 
    imageUrl = json.getString("imageUrl"); 
} 

public Influence(JSONObject json) { 
    parseInfluence(json.getJSONArray("myInfluencers"), myInfluencers); 
    parseInfluence(json.getJSONArray("myInfluencees"), myInfluencees); 
} 

private void parseInfluence(JSONArray array, List<User> list) { 
    int count = array.length(); 
    for (int i = 0; i < count; i++) { 
     list.add(new User(
      array.getJSONObject(i).getJSONObject("entity") 
      .getJSONObject("payload"))); 
    } 
} 

檢索的主題是一個稍微不同的方式來完成