簡體   English   中英

從Freebase請求大量數據-Java

[英]Request a large amount data from freebase - Java

我試圖從freebase請求大量數據。 但是我收到了錯誤消息“ HTTP響應代碼:403”。 有人有過類似的問題嗎?

這是我的代碼

私有靜態最終字符串service_url =“ https://www.googleapis.com/freebase/v1/mqlread ”;

public static void main(String[] args) 
{
    try
    {
        String cursor = "";
        String urlStr_initial = service_url + "?query=" + URLEncoder.encode(getQuery(), "UTF-8") + "&cursor";
        URL url = new URL(urlStr_initial);
        List<Freebase> list = new ArrayList<Freebase>();
        Freebase f_b;
        do
        {
            HttpURLConnection  url_con = (HttpURLConnection)url.openConnection();
            url_con.addRequestProperty("User-Agent", "Mozilla/4.76");

            StringBuilder str_builder = new StringBuilder();        
            BufferedReader reader = new BufferedReader(new InputStreamReader(url_con.getInputStream()));

            String line;
            while((line = reader.readLine()) != null)
            {
                str_builder.append(line);
            }
            String response = str_builder.toString();
            JSONObject j_object = new JSONObject(response);

            if(j_object.has("result"))
            {
                JSONArray j_array = j_object.getJSONArray("result");
                for(int i = 0; i < j_array.length(); i++)
                {
                    JSONObject j_o = j_array.getJSONObject(i);
                    if(j_o.has("id") == true && j_o.has("name"))
                    {
                        String id = j_o.getString("id");
                        String name = j_o.getString("name");
                        System.out.println("ID: " + id + "   /   Name:" + name);
                        f_b = new Freebase(id, name);
                        if(f_b != null)
                        {
                            list.add(f_b);
                        }
                        else
                        {
                            System.out.println("Null value in Freebase");
                        }
                    }
                }
            }
            else
            {
                System.out.println("There is no \"result\" key in JASON object");
            }

            if(j_object.has("cursor"))
            {
                cursor = j_object.get("cursor").toString();
            }
            else
            {
                cursor = "false";
            }

            String urlStr = urlStr_initial + "=" + cursor;
            url = new URL(urlStr);
        }while( !cursor.equalsIgnoreCase("false"));

        if(list != null)
        {
            TextFile tf = new TextFile();
            tf.writeToFile(list);
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

private static String getQuery()
{
    return "[{"
            + "\"name\": null,"
            + "\"id\": null,"
            + "\"type\":\"/people/person\","
            + "\"limit\": 500"
            + "}]";
}

您沒有說“大”是什么,但該API並非為批量下載而設計。 您應該為此使用數據轉儲。

HTTP響應代碼中通常包含更詳細的錯誤消息。 例如,如果顯示“ 403-Forbidden-API key required”,則表示您未包含API密鑰(我看不到代碼中的位置)。 如果顯示403-禁止-超出配額,則表明您已經超過了請求配額(您可以在API控制台上查看剩余的配額)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM