Few days ago, I have published the web application FF2FB – an app that will import your Friendfeed feeds and likes to Facebook. Although it is far from completion, I have managed to add minor features like importing feeds from Friendfeed and posting it on that site (at the home page).
The first version I used to import the feeds was file_get_contents(). It works locally. However, it takes me a day to figure it out, thanks to Kohana logs. I logged the import events so that when the import fails, I will know what caused it. What I discovered was that file_get_contents() on a remote url is not allowed because allow_url_fopen is disabled on my web host.
Looking for alternatives, I looked on my WordPress blog codes to check if how they do the same thing. Although some parts still uses file_get_contents(), others uses CURL. I checked the web host’s phpinfo and found out that CURL was enabled. I did not waste time and immediately dig Kohana’s system directory looking for something to that uses CURL and the like.
There is Kohana Remote. It is actually a helper class that can talk to a remove URL via CURL.
$response = Remote::get($url);
The class that I’m working is that it will get a Friendfeed user’s feeds and likes from Friendfeed API. It is encoded in JSON so I have to decode it when receiving a response. Here the the code snippet.
/**
* Retrieves feed from a url
*
* @param string $url
* @return array
*/
public function get($url)
{
try {
$data = Remote::get($url);
}
catch (Exception $e)
{
Kohana::$log->add(
Kohana::ERROR,
$e->getMessage() . ": Error while getting feeds at $url on " . __CLASS__ . " on function " . __FUNCTION__ . " line " . __LINE__
)->write();
return FALSE;
}
if ($data)
{
$data = json_decode($data);
if ($data instanceof stdClass && !empty($data->entries))
{
return self::parse_entries($data->entries);
}
}
return FALSE;
}
I used CURL to import feeds and you know what? I also used CURL as part of cron job that will trigger the importation of feeds. That CURL cron job is installed on a separate server since my host does not provide cron jobs.
Update: I now used a web-based cron via www.setcronjob.com.