2010-06-14 3 views
11

Wie würde ich JSON speichern, das über eine URL in eine Datei ausgegeben wurde?Speichern von JSON, das von einer URL in eine Datei ausgegeben wurde

beispiel von dem Twitter-Suche API (diese http://search.twitter.com/search.json?q=hi)

Sprache ist nicht wichtig.

Danke!

bearbeiten // Wie würde ich dann weitere Aktualisierungen an EOF anhängen?

bearbeiten 2 // Tolle Antworten Jungs wirklich, aber ich akzeptierte die, die ich dachte, war die eleganteste. Vielen Dank! :)

Antwort

18

Dies ist in jeder Sprache einfach, aber der Mechanismus variiert. Mit wget und einer Schale:

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

anhängen:

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

mit Python:

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

anhängen:

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()) 
+0

Wie würde ich dann weitere Updates an EOF anhängen? – Skizit

2

In Schale:

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

Wie würde ich dann weitere Aktualisierungen an EOF anhängen? – Skizit

+0

Ausgabe nur nach stdout ('-') und Verwendung des Append-Umleitungsoperators (' >> '). –

+1

'wget >> output.json' – Ether

4

Hier ist die (ausführlich;)) Java-Variante:

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) {} 
} 

Siehe auch:

+0

Wie würde ich dann weitere Updates an EOF anhängen? – Skizit

+0

Siehe den Kommentar im Codebeispiel. – BalusC

3

können Sie CURL

curl -d "q=hi" http://search.twitter.com -o file1.txt 
4

In PHP verwenden:

$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}”."; 
} 
1

Sie Jackson verwenden können:

ObjectMapper mapper = new ObjectMapper(); 
Map<String,Object> map = mapper.readValue(url, Map.class); 
mapper.writeValue(new File("myfile.json"), map); 
1

Hier ist eine weitere Möglichkeit, dies mit PHP und fOpen zu tun.

<?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); 
    } 

} 
?> 
Verwandte Themen