1

freebase から大量のデータをリクエストしようとしました。しかし、「HTTP 応答コード: 403」というエラー メッセージが表示されました。誰かが以前に同様の問題を抱えていましたか?

これが私のコードです

private static final String 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"
            + "}]";
}
4

1 に答える 1