3 namespace Wallabag\ImportBundle\Import
;
5 use Doctrine\ORM\EntityManager
;
7 use Symfony\Component\HttpFoundation\Session\Session
;
8 use Wallabag\CoreBundle\Entity\Entry
;
9 use Wallabag\CoreBundle\Tools\Utils
;
11 class PocketImport
implements ImportInterface
18 public function __construct($tokenStorage, Session
$session, EntityManager
$em, $consumerKey)
20 $this->user
= $tokenStorage->getToken()->getUser();
21 $this->session
= $session;
23 $this->consumerKey
= $consumerKey;
26 public function getName()
31 public function getDescription()
33 return 'This importer will import all your <a href="https://getpocket.com">Pocket</a> data.';
37 * Create a new Client.
41 private function createClient()
46 'content-type' => 'application/json',
47 'X-Accept' => 'application/json',
56 private function parsePocketEntries($entries)
58 foreach ($entries as $entry) {
59 $newEntry = new Entry($this->user
);
60 $newEntry->setUrl($entry['given_url']);
61 $newEntry->setTitle(isset($entry['resolved_title']) ? $entry['resolved_title'] : (isset($entry['given_title']) ? $entry['given_title'] : 'Untitled'));
63 if (isset($entry['excerpt'])) {
64 $newEntry->setContent($entry['excerpt']);
67 if (isset($entry['has_image']) && $entry['has_image'] > 0) {
68 $newEntry->setPreviewPicture($entry['image']['src']);
71 if (isset($entry['word_count'])) {
72 $newEntry->setReadingTime(Utils
::convertWordsToMinutes($entry['word_count']));
75 $this->em
->persist($newEntry);
81 public function oAuthRequest($redirectUri, $callbackUri)
83 $client = $this->createClient();
84 $request = $client->createRequest('POST', 'https://getpocket.com/v3/oauth/request',
86 'body' => json_encode([
87 'consumer_key' => $this->consumerKey
,
88 'redirect_uri' => $redirectUri,
93 $response = $client->send($request);
94 $values = $response->json();
96 // store code in session for callback method
97 $this->session
->set('pocketCode', $values['code']);
99 return 'https://getpocket.com/auth/authorize?request_token='.$values['code'].'&redirect_uri='.$callbackUri;
102 public function oAuthAuthorize()
104 $client = $this->createClient();
106 $request = $client->createRequest('POST', 'https://getpocket.com/v3/oauth/authorize',
108 'body' => json_encode([
109 'consumer_key' => $this->consumerKey
,
110 'code' => $this->session
->get('pocketCode'),
115 $response = $client->send($request);
117 return $response->json()['access_token'];
120 public function import($accessToken)
122 $client = $this->createClient();
124 $request = $client->createRequest('POST', 'https://getpocket.com/v3/get',
126 'body' => json_encode([
127 'consumer_key' => $this->consumerKey
,
128 'access_token' => $accessToken,
129 'detailType' => 'complete',
134 $response = $client->send($request);
135 $entries = $response->json();
137 $this->parsePocketEntries($entries['list']);
139 $this->session
->getFlashBag()->add(
141 count($entries['list']).' entries imported'