0

我在我的 Twitch IRC Bot 中工作,但我们遇到了问题。

我们通过 twitch API (json) 接收到很多信息,例如 Who followed、dateOf .. viewercounts.. 追随者数量等等。

正在制作一个跟随功能来读取整个列表中的所有名称并将所有名称设置到我们的数据库中。首先,我们尝试读取所有内容并 system.output 它们,但我们总是收到错误:org.json.JSONException: JSONArray[100] not found。

我们注意到“0”也包含一个数组,因此我们将循环设置为 0-99,它应该更改链接,然后添加 100+(下一个站点)并再次读取 JSON。那么它应该只是继续下一个站点的循环。

以下是读取方法的主要代码。

我们尝试了调试,但还没有找到解决方案 x(

MyBot 主要代码片段:

JSONObject follower = null;
String followername = null;
int listnumber;

offsetvalue = 0;

for(int i = 0; i < TwitchStatus.totalfollows; i++) { 

    try {
        follower = TwitchStatus.followerarray.getJSONObject(i);
    } catch (JSONException e2) {
        e2.printStackTrace();
    }        

    try {
        followername = follower.getJSONObject("user").getString("display_name");
    } catch (JSONException e) {
        e.printStackTrace();
    } 

    System.out.println("array ist: "+i +" " +followername);

    listnumber = offsetvalue+99; // 0+99

    if (i == listnumber){
        offsetvalue = offsetvalue+100;

        try {
            TwitchStatus.FollowerTicker();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    // System.out.println("Follower abgleichs-Liste: "+followername);        
}

还有阅读器方法:

////////////////////////////////////////////////////////////////////////////////////
// Twitch Follower Ticker
////////////////////////////////////////////////////////////////////////////////////

private String readAll4(Reader rd) throws IOException {
    StringBuilder sb = new StringBuilder();
    int cp;
    while ((cp = rd.read()) != -1) {
        sb.append((char) cp);
    }
    return sb.toString();
  }

  public JSONObject readJsonFromUrl4(String url) throws IOException, JSONException {
    InputStream is = new URL(url).openStream();
    try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        String jsonText = readAll4(rd);
        JSONObject json = new JSONObject(jsonText);
        return json;
    } finally {
        is.close();
    }
  }

  public static void FollowerTicker() throws IOException, JSONException {
    json = readJsonFromUrl2("https://api.twitch.tv/kraken/channels/dotastarladder_en/follows?direction=DESC&limit=100&offset="+MyBot.offsetvalue+"");

    followerarray = json.getJSONArray("follows");

    {
        JSONObject follower = followerarray.getJSONObject(0);
        neuerfollower = follower.getString("created_at");
        fname = follower.getJSONObject("user").getString("display_name");  
        totalfollows = json.getInt("_total");
    }
} 
4

1 回答 1

3

API 文档中的注释:

限制可选整数数组中的最大对象数。默认值为 25。最大值为 100。

所以你会怎么做?查询下一个,当然!这是链接页面中的 JSON 部分,以及下一个 URL 的示例。基本上,您只需添加一个偏移量,但 URL 已经声明了它,所以...

{
  "_total": 1234,
  "_links": {
    "next": "https://api.twitch.tv/kraken/channels/test_user1/follows?direction=DESC&limit=25&offset=25",

我将如何解决这个问题是这样的:

  1. 创建一个接收 URL 以解析 JSON 文本的 AsyncTask。
  2. 收到数据后,开始一个新任务来读取下一个。
  3. 读取此 JSON 字符串中收到的所有内容
  4. 下载后根据需要编译所有内容。
于 2014-03-21T20:20:33.957 回答