Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

This question already has an answer here:

have run my theme through the Theme checker plugin and it seems upset about use of 'file_get_contents' to get a json url. I've found posts saying i should use wp_remote_get. I'm currently decoding the url with the following:

$url = 'url' . $var;
$json =   file_get_contents($url,0,null,null);
$output = json_decode($json,true); 

The message I get from the Theme Checker is:

'WARNING: file_get_contents was found in the file.php possible file operations.'

Is it just saying this because there is a fucntion I could possibly use by wordpress or any other reasons? Also how would I use 'wp_remote_get'. I tried a few variations, mostly replacing file_get_contents with wp_remote_get with no luck,. Doesn't seem to decode the url at all.

share|improve this question
2  
This question/answer can help you –  cybnet Sep 27 '13 at 9:45
    
hi, thanks for that, did help, so assumed it was saying wp-Remote did all the decoding for me already? So did $url = 'url' . $var; $output = wp_remote_get( $url ); but did not work –  David Sep 27 '13 at 10:01
    
You have to read again the link I posted. If you make $output = wp_remote_get( $url ); the $output will be an array where you can access to $output['headers'], $output['body']. I think what you want is $json = json_decode($output['body']); –  cybnet Sep 27 '13 at 10:05
    
hi, yeah sorry, just figured it out myself! Thanks for help –  David Sep 27 '13 at 10:07
    
Don't use json_decode($output['body'] instead use wp_remote_retrieve_body( $output ) –  Horttcore Sep 27 '13 at 10:10
add comment

marked as duplicate by kaiser, s_ha_dum, toscho Sep 27 '13 at 22:09

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

3 Answers

Use wp_remote_get() in conjunction with wp_remote_retrieve_body()

Example

<?php
$request = wp_remote_get('http://example.com');
$response = wp_remote_retrieve_body( $request );
echo $response;
?>

Check the documentation for possible arguements

share|improve this answer
    
Hi, thanks, I seem to be able to echo out the whole thing but when I just try to get some certain values within the json file, lets say $response['companyname'] i Just get a '{' –  David Oct 3 '13 at 11:03
    
If the body of a document is also a json file then use json_encode() –  Horttcore Oct 8 '13 at 13:07
add comment

You can use wp_remote_get() in the following way.

$url = 'url' . $var;
$request =   wp_remote_get($url);
// Get the body of the response
$response = wp_remote_retrieve_body( $request );
// Decode the json
$output = json_decode( request ); 

$output now has what you want and now you can go ahead and do your stuff

There is a also a series of tutorials on wp_remote_get(). Go through it, it would definitely help. Link -- Tutorial

Hope it helps.

share|improve this answer
add comment

If you need to send a JSON response, then there's a set of functions for that. In case you need that for an AJAX callback:

Would finally be something like that:

$request  = wp_remote_get( 'http://example.com' );
$response = wp_remote_retrieve_body( $request );
if ( 
    'OK' !== wp_remote_retrieve_response_message( $response )
    OR 200 !== wp_remote_retrieve_response_code( $response )
)
    wp_send_json_error( $response );

wp_send_json_success( $response );

Both wp_send_json_success/_error() functions are wrappers for wp_send_json(), which includes wp_die() at the end. So there's nothing else to do.

Keep in mind that 99% of all remote APIs are sending 200/OK in case of errors. You'll still have to manually inspect the result and check for errors.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.