exchange_options:
name: 'wallabag.import.wallabag_v2'
type: topic
+ import_elcurator:
+ connection: default
+ exchange_options:
+ name: 'wallabag.import.elcurator'
+ type: topic
import_firefox:
connection: default
exchange_options:
name: 'wallabag.import.wallabag_v2'
callback: wallabag_import.consumer.amqp.wallabag_v2
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
+ import_elcurator:
+ connection: default
+ exchange_options:
+ name: 'wallabag.import.elcurator'
+ type: topic
+ queue_options:
+ name: 'wallabag.import.elcurator'
+ callback: wallabag_import.consumer.amqp.elcurator
+ qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
import_firefox:
connection: default
exchange_options:
# wallabag_v2:
# page_title: 'Import > Wallabag v2'
# description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
# readability:
# page_title: 'Import > Readability'
# description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
wallabag_v2:
page_title: 'Aus wallabag v2 importieren'
description: 'Dieser Import wird all deine Artikel aus wallabag v2 importieren. Gehe auf "Alle Artikel" und dann, in der Exportieren-Seitenleiste auf "JSON". Dabei erhältst du eine "All articles.json"-Datei.'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'Aus Readability importieren'
description: 'Dieser Import wird all deine Artikel aus Readability importieren. Auf der Tools Seite (https://www.readability.com/tools/) klickst du auf "Exportiere deine Daten" in dem Abschnitt "Datenexport". Du wirst eine E-Mail mit einem Downloadlink zu einer json Datei, die aber nicht auf .json endet, erhalten'
wallabag_v2:
page_title: 'Import > Wallabag v2'
description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
+ elcurator:
+ page_title: 'Import > elCurator'
+ description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'Import > Readability'
description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
wallabag_v2:
page_title: 'Importar > Wallabag v2'
description: 'Importa todos tus artículos de wallabag v2. En la sección Todos los artículos, en la barra lateral, haga clic en "JSON". Obtendrás un archivo llamado "All articles.json".'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'Importar > Readability'
description: 'Importa todos tus artículos de Readability. En la página de herramientas (https://www.readability.com/tools/), haga clic en "Exportar tus datos" en la sección "Exportar datos". Recibirás un correo electrónico para descargar un JSON (que no tiene extensión .json).'
wallabag_v2:
page_title: 'درونریزی > Wallabag v2'
description: 'این برنامه همهٔ دادههای شما را در نسخهٔ ۲ wallabag درونریزی میکند. به بخش «همهٔ مقالهها» بروید و در بخش «برونریزی» روی "JSON" کلیک کنید. با این کار شما پروندهای به شکل "All articles.json" دریافت خواهید کرد.'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'درونریزی > Readability'
# description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
wallabag_v2:
page_title: "Importer > wallabag v2"
description: "Cet outil va importer tous vos articles d’une autre instance de wallabag v2. Allez dans tous vos articles, puis, sur la barre latérale, cliquez sur « JSON ». Vous allez récupérer un fichier « All articles.json »"
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: "Importer > Readability"
description: "Cet outil va importer toutes vos données de Readability. Sur la page des outils (https://www.readability.com/tools/), cliquez sur « Export your data » dans la section « Data Export ». Vous allez recevoir un courriel avec un lien pour télécharger le json."
wallabag_v2:
page_title: 'Importa da > Wallabag v2'
description: 'Questo importatore copierà tutti i tuoi dati da un wallabag v2. Vai in "Tutti i contenuti", e, nella barra laterale di esportazione, clicca su "JSON". Otterrai un file "Tutti i contenuti.json'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'Importa da > Readability'
description: 'Questo importatore copierà tutti i tuoi articoli da Readability. Nella pagina strumenti (https://www.readability.com/tools/), clicca su "Export your data" nella sezione "Data Export". Riceverai una E-mail per scaricare un file json (che tuttavia non termina con .json).'
wallabag_v2:
page_title: 'Importar > Wallabag v2'
description: "Aquesta aisina importarà totas vòstras donadas d'una instància mai de wallabag v2. Anatz dins totes vòstres articles, puèi, sus la barra laterala, clicatz sus \"JSON\". Traparetz un fichièr \"All articles.json\"."
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'Importar > Readability'
description: "Aquesta aisina importarà totas vòstres articles de Readability. Sus la pagina de l'aisina (https://www.readability.com/tools/), clicatz sus \"Export your data\" dins la seccion \"Data Export\". Recebretz un corrièl per telecargar un json (qu'acaba pas amb un .json de fach)."
wallabag_v2:
page_title: 'Import > Wallabag v2'
description: 'Ten importer, zaimportuje wszystkie twoje artykułu z wallabag v2. Idź do wszystkich artykułów, a następnie na panelu exportu kliknij na "JSON". Otrzymasz plik "All articles.json".'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'Import > Readability'
description: 'Ten importer, zaimportuje wszystkie twoje artykuły z Readability. Na stronie narzędzi (https://www.readability.com/tools/), kliknij na "Export your data" w sekcji "Data Export". Otrzymach email z plikiem JSON (plik nie będzie zawierał rozszerzenia .json).'
wallabag_v2:
page_title: 'Importar > Wallabag v2'
description: 'Com este importador você importa todos os seus artigos do wallabag v2. Vá em Todos os artigos e então, na barra lateral de exportação, clique em "JSON". Você irá criar um arquivo "All articles.json".'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'Importar > Readability'
description: 'Este importador pode importar todos os artigos do Readability. Nas página ferramentas (https://www.readability.com/tools/), clique em "Export your data" na seção "Data Export". Você receberá um e-mail para fazer o download de um json (que de fato não termina com .json).'
# wallabag_v2:
# page_title: 'Import > Wallabag v2'
# description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
# readability:
# page_title: 'Import > Readability'
# description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
wallabag_v2:
page_title: 'Импорт > Wallabag v2'
description: 'Функция импорта добавит все ваши записи wallabag v2. Перейдите ко всем статьям, затем на боковой панели экспорта нажмите "JSON". У вас появится файл со всеми записями "All articles.json".'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'Импорт > Readability'
description: 'Функция импорта добавит все ваши записи для чтения. На странице инструментов (https://www.readability.com/tools/) нажмите "Экспорт ваших данных" в разделе "Экспорт данных". Вы получите электронное письмо для загрузки json (что не заканчивается только .json файлом).'
wallabag_v2:
page_title: 'นำเข้าข้อมูล > Wallabag v2'
description: 'สำหรับผู้นำเข้าข้อมูลจะ import บทความ wallabag v2 ทั้งหมดของคุณ ไปยังบทความทั้งหมด, ดังนั้น, บน export sidebar, click ที่ "JSON" คุณจะมีไฟล์ "All articles.json"'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'นำเข้าข้อมูล > Readability'
description: 'สำหรับผู้นำเข้าข้อมูลจะ import บทความ Readability ทั้งหมดของคุณ ไปที่เครื่องมือ (https://www.readability.com/tools/) ของหน้านั้น, click ที่ "Export your data" ในส่วน "Data Export" คุณจะได้รับ email ไป download json (which does not end with .json in fact).'
wallabag_v2:
page_title: 'İçe Aktar > Wallabag v2'
# description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
+ # elcurator:
+ # page_title: 'Import > elCurator'
+ # description: 'This importer will import all your elCurator articles. Go to your preferences in your elCurator account and then, export your content. You will have a JSON file.'
readability:
page_title: 'İçe Aktar > Readability'
# description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
--- /dev/null
+<?php
+
+namespace Wallabag\ImportBundle\Controller;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Annotation\Route;
+
+class ElcuratorController extends WallabagController
+{
+ /**
+ * @Route("/elcurator", name="import_elcurator")
+ */
+ public function indexAction(Request $request)
+ {
+ return parent::indexAction($request);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getImportService()
+ {
+ $service = $this->get('wallabag_import.elcurator.import');
+
+ if ($this->get('craue_config')->get('import_with_rabbitmq')) {
+ $service->setProducer($this->get('old_sound_rabbit_mq.import_elcurator_producer'));
+ } elseif ($this->get('craue_config')->get('import_with_redis')) {
+ $service->setProducer($this->get('wallabag_import.producer.redis.elcurator'));
+ }
+
+ return $service;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getImportTemplate()
+ {
+ return 'WallabagImportBundle:Elcurator:index.html.twig';
+ }
+}
--- /dev/null
+<?php
+
+namespace Wallabag\ImportBundle\Import;
+
+class ElcuratorImport extends WallabagImport
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return 'elcurator';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getUrl()
+ {
+ return 'import_elcurator';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getDescription()
+ {
+ return 'import.elcurator.description';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function prepareEntry($entry = [])
+ {
+ return [
+ 'url' => $entry['url'],
+ 'title' => $entry['title'],
+ 'created_at' => $entry['created_at'],
+ 'is_archived' => 0,
+ 'is_starred' => $entry['is_saved'],
+ ] + $entry;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function setEntryAsRead(array $importedEntry)
+ {
+ $importedEntry['is_archived'] = 1;
+
+ return $importedEntry;
+ }
+}
- "@wallabag_import.wallabag_v2.import"
- "@event_dispatcher"
- "@logger"
+ wallabag_import.consumer.amqp.elcurator:
+ class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
+ arguments:
+ - "@doctrine.orm.entity_manager"
+ - "@wallabag_user.user_repository"
+ - "@wallabag_import.elcurator.import"
+ - "@event_dispatcher"
+ - "@logger"
wallabag_import.consumer.amqp.firefox:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
- "@event_dispatcher"
- "@logger"
+ # elcurator
+ wallabag_import.queue.redis.elcurator:
+ class: Simpleue\Queue\RedisQueue
+ arguments:
+ - "@wallabag_core.redis.client"
+ - "wallabag.import.elcurator"
+
+ wallabag_import.producer.redis.elcurator:
+ class: Wallabag\ImportBundle\Redis\Producer
+ arguments:
+ - "@wallabag_import.queue.redis.elcurator"
+
+ wallabag_import.consumer.redis.elcurator:
+ class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
+ arguments:
+ - "@doctrine.orm.entity_manager"
+ - "@wallabag_user.user_repository"
+ - "@wallabag_import.elcurator.import"
+ - "@event_dispatcher"
+ - "@logger"
+
# firefox
wallabag_import.queue.redis.firefox:
class: Simpleue\Queue\RedisQueue
tags:
- { name: wallabag_import.import, alias: wallabag_v2 }
+ wallabag_import.elcurator.import:
+ class: Wallabag\ImportBundle\Import\ElcuratorImport
+ arguments:
+ - "@doctrine.orm.entity_manager"
+ - "@wallabag_core.content_proxy"
+ - "@wallabag_core.tags_assigner"
+ - "@event_dispatcher"
+ calls:
+ - [ setLogger, [ "@logger" ]]
+ tags:
+ - { name: wallabag_import.import, alias: elcurator }
+
wallabag_import.readability.import:
class: Wallabag\ImportBundle\Import\ReadabilityImport
arguments:
--- /dev/null
+{% extends "WallabagImportBundle:WallabagV1:index.html.twig" %}
+
+{% block title %}{{ 'import.elcurator.page_title'|trans }}{% endblock %}
--- /dev/null
+<?php
+
+namespace Tests\Wallabag\ImportBundle\Controller;
+
+use Symfony\Component\HttpFoundation\File\UploadedFile;
+use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
+
+class ElcuratorControllerTest extends WallabagCoreTestCase
+{
+ public function testImportElcurator()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $crawler = $client->request('GET', '/import/elcurator');
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+ $this->assertSame(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
+ $this->assertSame(1, $crawler->filter('input[type=file]')->count());
+ }
+
+ public function testImportElcuratorWithRabbitEnabled()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 1);
+
+ $crawler = $client->request('GET', '/import/elcurator');
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+ $this->assertSame(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
+ $this->assertSame(1, $crawler->filter('input[type=file]')->count());
+
+ $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 0);
+ }
+
+ public function testImportElcuratorBadFile()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $crawler = $client->request('GET', '/import/elcurator');
+ $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
+
+ $data = [
+ 'upload_import_file[file]' => '',
+ ];
+
+ $client->submit($form, $data);
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+ }
+
+ public function testImportElcuratorWithRedisEnabled()
+ {
+ $this->checkRedis();
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $client->getContainer()->get('craue_config')->set('import_with_redis', 1);
+
+ $crawler = $client->request('GET', '/import/elcurator');
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+ $this->assertSame(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
+ $this->assertSame(1, $crawler->filter('input[type=file]')->count());
+
+ $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
+
+ $file = new UploadedFile(__DIR__ . '/../fixtures/elcurator.json', 'elcurator.json');
+
+ $data = [
+ 'upload_import_file[file]' => $file,
+ ];
+
+ $client->submit($form, $data);
+
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+
+ $crawler = $client->followRedirect();
+
+ $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
+ $this->assertContains('flashes.import.notice.summary', $body[0]);
+
+ $this->assertNotEmpty($client->getContainer()->get('wallabag_core.redis.client')->lpop('wallabag.import.elcurator'));
+
+ $client->getContainer()->get('craue_config')->set('import_with_redis', 0);
+ }
+
+ public function testImportElcuratorWithFile()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $crawler = $client->request('GET', '/import/elcurator');
+ $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
+
+ $file = new UploadedFile(__DIR__ . '/../fixtures/elcurator.json', 'elcurator.json');
+
+ $data = [
+ 'upload_import_file[file]' => $file,
+ ];
+
+ $client->submit($form, $data);
+
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+
+ $crawler = $client->followRedirect();
+
+ $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
+ $this->assertContains('flashes.import.notice.summary', $body[0]);
+
+ $content = $client->getContainer()
+ ->get('doctrine.orm.entity_manager')
+ ->getRepository('WallabagCoreBundle:Entry')
+ ->findByUrlAndUserId(
+ 'https://devblog.lexik.fr/qualite-de-code-integration-de-php-git-hooks-dans-symfony2/',
+ $this->getLoggedInUserId()
+ );
+
+ $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
+
+ $this->assertSame('Qualité de code - Intégration de php-git-hooks dans Symfony2 - Experts Symfony et Drupal - Lexik', $content->getTitle());
+ $this->assertSame('2015-09-09', $content->getCreatedAt()->format('Y-m-d'));
+ $this->assertTrue($content->isStarred(), 'Entry is starred');
+
+ $tags = $content->getTags();
+ $this->assertContains('tag1', $tags, 'It includes the "tag1" tag');
+ $this->assertContains('tag2', $tags, 'It includes the "tag2" tag');
+ }
+}
$crawler = $client->request('GET', '/import/');
$this->assertSame(200, $client->getResponse()->getStatusCode());
- $this->assertSame(8, $crawler->filter('blockquote')->count());
+ $this->assertSame(9, $crawler->filter('blockquote')->count());
}
}
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
$this->assertNotEmpty($content->getMimetype(), 'Mimetype for https://ma.ttias.be is ok');
$this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for https://ma.ttias.be is ok');
+ $this->assertNull($content->getLanguage(), 'Language for https://ma.ttias.be is null');
$tags = $content->getTags();
$this->assertContains('foot', $tags, 'It includes the "foot" tag');
--- /dev/null
+[
+ {
+ "created_at": "2015-09-09 11:10:32 UTC",
+ "title": "Qualité de code - Intégration de php-git-hooks dans Symfony2 - Experts Symfony et Drupal - Lexik",
+ "url": "https://devblog.lexik.fr/qualite-de-code-integration-de-php-git-hooks-dans-symfony2/",
+ "description": null,
+ "tags": [
+ "tag1",
+ "tag2"
+ ],
+ "is_saved": true
+ }
+]