Сохранить вывод JSON из URL в файл - PullRequest
14 голосов
/ 15 июня 2010

Как сохранить JSON, выведенный с помощью URL, в файл?

например, из API поиска в Твиттере (это http://search.twitter.com/search.json?q=hi)

Язык не важен.

edit // Как бы мне добавить дополнительные обновления в EOF?

edit 2 // Ребята, на самом деле отличные ответы, но я принял тот, который мне показался самым элегантным.

Ответы [ 7 ]

25 голосов
/ 15 июня 2010

Это легко на любом языке, но механизм меняется. С wget и оболочкой:

wget 'http://search.twitter.com/search.json?q=hi' -O hi.json

Добавить:

wget 'http://search.twitter.com/search.json?q=hi' -O - >> hi.json

С Python:

urllib.urlretrieve('http://search.twitter.com/search.json?q=hi', 'hi.json')

Добавить:

hi_web = urllib2.urlopen('http://search.twitter.com/search.json?q=hi');
with open('hi.json', 'ab') as hi_file:
  hi_file.write(hi_web.read())
5 голосов
/ 15 июня 2010

В PHP:

$outfile= 'result.json';
$url='http://search.twitter.com/search.json?q=hi';
$json = file_get_contents($url);
if($json) { 
    if(file_put_contents($outfile, $json, FILE_APPEND)) {
      echo "Saved JSON fetched from “{$url}” as “{$outfile}”.";
    }
    else {
      echo "Unable to save JSON to “{$outfile}”.";
    }
}
else {
   echo "Unable to fetch JSON from “{$url}”.";
}
5 голосов
/ 15 июня 2010

Вы можете использовать CURL

curl -d "q=hi" http://search.twitter.com -o file1.txt
4 голосов
/ 15 июня 2010

Вот (подробный;)) вариант Java:

InputStream input = null;
OutputStream output = null;
try {
    input = new URL("http://search.twitter.com/search.json?q=hi").openStream();
    output = new FileOutputStream("/output.json");
    byte[] buffer = new byte[1024];
    for (int length = 0; (length = input.read(buffer)) > 0;) {
        output.write(buffer, 0, length);
    }
    // Here you could append further stuff to `output` if necessary.
} finally {
    if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
    if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
}

См. Также :

2 голосов
/ 15 июня 2010

В оболочке:

wget -O output.json 'http://search.twitter.com/search.json?q=hi'
1 голос
/ 03 марта 2011

Вот еще один способ сделать это с помощью PHP и fOpen.

<?php
// Define your output file name and your search query
$output = 'result.txt';
$search = 'great';

write_twitter_to_file($output, $search);

/*
 * Writes Json responses from twitter API to a file output.
 * 
 * @param $output: The name of the file that contains the output 
 * @param $search: The search term query to use in the Twitter API
*/

function write_twitter_to_file($output, $search) {
    $search = urlencode($search);
    $url = 'http://search.twitter.com/search.json?q=' . $search;
    $handle = fopen($url, "r");

    if ($handle) {
        while (($buffer = fgets($handle, 4096)) !== false) {
            file_put_contents($output, $buffer, FILE_APPEND);
            echo "Output has been saved to file<br/>";
        }

        if (!feof($handle)) {
            echo "Error: unexpected fgets() fail\n";
        }

        fclose($handle);
    }

}
?>
1 голос
/ 30 декабря 2010

Вы можете использовать Джексон :

 ObjectMapper mapper = new ObjectMapper(); 
 Map<String,Object> map = mapper.readValue(url, Map.class);
 mapper.writeValue(new File("myfile.json"), map);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...