3 namespace Wallabag\ImportBundle\Controller
;
5 use Symfony\Bundle\FrameworkBundle\Controller\Controller
;
6 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route
;
7 use Symfony\Component\HttpFoundation\Request
;
9 use Wallabag\CoreBundle\Entity\Entry
;
10 use Wallabag\CoreBundle\Tools\Utils
;
12 class PocketController
extends Controller
15 * @Route("/import", name="import")
17 public function importAction()
19 return $this->render('WallabagImportBundle:Pocket:index.html.twig', array());
23 * Create a new Client.
27 private function createClient()
32 'content-type' => 'application/json',
33 'X-Accept' => 'application/json',
40 * @Route("/auth-pocket", name="authpocket")
42 public function authAction()
44 $client = $this->createClient();
45 $request = $client->createRequest('POST', 'https://getpocket.com/v3/oauth/request',
47 'body' => json_encode([
48 'consumer_key' => $this->container
->getParameter('pocket_consumer_key'),
49 'redirect_uri' => $this->generateUrl('import', array(), true),
54 $response = $client->send($request);
55 $values = $response->json();
56 $code = $values['code'];
58 // store code in session for callback method
59 $session = $this->get('session');
60 $session->set('pocketCode', $code);
62 $url = 'https://getpocket.com/auth/authorize?request_token='.$code.'&redirect_uri='.$this->generateUrl('callbackpocket', array(), true);
64 return $this->redirect($url, 301);
68 * @Route("/callback-pocket", name="callbackpocket")
70 public function callbackAction()
72 $client = $this->createClient();
74 $request = $client->createRequest('POST', 'https://getpocket.com/v3/oauth/authorize',
76 'body' => json_encode([
77 'consumer_key' => $this->container
->getParameter('pocket_consumer_key'),
78 'code' => $this->get('session')->get('pocketCode'),
83 $response = $client->send($request);
84 $values = $response->json();
85 $accessToken = $values['access_token'];
87 $request = $client->createRequest('POST', 'https://getpocket.com/v3/get',
89 'body' => json_encode([
90 'consumer_key' => $this->container
->getParameter('pocket_consumer_key'),
91 'access_token' => $accessToken,
92 'detailType' => 'complete',
97 $response = $client->send($request);
98 $entries = $response->json();
100 $this->parsePocketEntries($entries['list']);
102 $this->get('session')->getFlashBag()->add(
104 count($entries['list']).' entries imported'
107 return $this->redirect($this->generateUrl('homepage'));
113 private function parsePocketEntries($entries)
115 $em = $this->getDoctrine()->getManager();
117 foreach ($entries as $entry) {
118 $newEntry = new Entry($this->getUser());
119 $newEntry->setUrl($entry['given_url']);
120 $newEntry->setTitle(isset($entry['resolved_title']) ? $entry['resolved_title'] : (isset($entry['given_title']) ? $entry['given_title'] : 'Untitled'));
122 if (isset($entry['excerpt'])) {
123 $newEntry->setContent($entry['excerpt']);
126 if (isset($entry['has_image']) && $entry['has_image'] > 0) {
127 $newEntry->setPreviewPicture($entry['image']['src']);
130 if (isset($entry['word_count'])) {
131 $newEntry->setReadingTime(Utils
::convertWordsToMinutes($entry['word_count']));
134 $em->persist($newEntry);