80 lines
1.7 KiB
PHP
80 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace Model\Service;
|
|
|
|
use Model\Config;
|
|
use Model\Item;
|
|
use PicoFeed\Client\Client;
|
|
use PicoFeed\Client\ClientException;
|
|
|
|
// Sync the item to an external service
|
|
function push($item_id)
|
|
{
|
|
$item = Item\get($item_id);
|
|
|
|
if ((bool) Config\get('pinboard_enabled')) {
|
|
pinboard_add($item);
|
|
}
|
|
|
|
if ((bool) Config\get('instapaper_enabled')) {
|
|
instapaper_add($item);
|
|
}
|
|
}
|
|
|
|
// Send item to Instapaper
|
|
function instapaper_add(array $item)
|
|
{
|
|
$params = array(
|
|
'username' => Config\get('instapaper_username'),
|
|
'password' => Config\get('instapaper_password'),
|
|
'url' => $item['url'],
|
|
'title' => $item['title'],
|
|
);
|
|
|
|
$url = 'https://www.instapaper.com/api/add?'.http_build_query($params);
|
|
|
|
$client = api_call($url);
|
|
|
|
if ($client !== false) {
|
|
return $client->getStatusCode() === 201;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// Add a Pinboard bookmark
|
|
function pinboard_add(array $item)
|
|
{
|
|
$params = array(
|
|
'auth_token' => Config\get('pinboard_token'),
|
|
'format' => 'json',
|
|
'url' => $item['url'],
|
|
'description' => $item['title'],
|
|
'tags' => Config\get('pinboard_tags'),
|
|
);
|
|
|
|
$url = 'https://api.pinboard.in/v1/posts/add?'.http_build_query($params);
|
|
|
|
$client = api_call($url);
|
|
|
|
if ($client !== false) {
|
|
$response = json_decode($client->getContent(), true);
|
|
return is_array($response) && $response['result_code'] === 'done';
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// HTTP client
|
|
function api_call($url)
|
|
{
|
|
try {
|
|
$client = Client::getInstance();
|
|
$client->setUserAgent(Config\HTTP_USER_AGENT);
|
|
$client->execute($url);
|
|
return $client;
|
|
} catch (ClientException $e) {
|
|
return false;
|
|
}
|
|
}
|