diff --git a/VERSIONS_HOTLINE/169349 b/VERSIONS_HOTLINE/169349
new file mode 100644
index 0000000000000000000000000000000000000000..36a2008ea861274ee75a36014e3127211725860f
--- /dev/null
+++ b/VERSIONS_HOTLINE/169349
@@ -0,0 +1 @@
+ - correctif #169349 : Bibliothèque numérique : Correction de l'URL de moissonnage Arte Campus et récupération de méta-données.
\ No newline at end of file
diff --git a/library/digital_resources/ArteCampus/Config.php b/library/digital_resources/ArteCampus/Config.php
index f4485ba598b51b9a623b0416998e6ec42cce4dd1..90acfd553d5fd1b08ce6eaaded7c98776592bda2 100644
--- a/library/digital_resources/ArteCampus/Config.php
+++ b/library/digital_resources/ArteCampus/Config.php
@@ -73,6 +73,12 @@ class ArteCampus_Config extends Class_DigitalResource_Config {
 
 
   public function getHarvestUrl(int $page = 1) : string {
-    return $this->getAdminVar('CATALOG_URL');
+    $catalog_url = $this->getAdminVar('CATALOG_URL');
+    $ent_id = $this->getAdminVar('ENT_ID');
+    $ent_param = strpos( $catalog_url , '?')
+      ? '&ent=' . $ent_id
+      : '?ent=' . $ent_id;
+
+    return $catalog_url . $ent_param;
   }
 }
diff --git a/library/digital_resources/ArteCampus/Service.php b/library/digital_resources/ArteCampus/Service.php
index 48e42064cd4a2dcf4f3296a1289f8583baaf6968..d65a002e010c94c70c6c114b36e3cf0ab83b1de5 100644
--- a/library/digital_resources/ArteCampus/Service.php
+++ b/library/digital_resources/ArteCampus/Service.php
@@ -44,6 +44,20 @@ class ArteCampus_Service extends Class_DigitalResource_Service {
   }
 
 
+  protected function _importRessources($ressources) {
+    if(!$ressources)
+      return [];
+
+    $harvestedIds = [];
+    foreach ($ressources as $ressource) {
+      $harvestedIds[] = $ressource->getId();
+      $this->loadRessource($ressource);
+      $ressource->import(true);
+    }
+    return $harvestedIds;
+  }
+
+
   public function getPageCount() {
     return 1;
   }
@@ -54,7 +68,12 @@ class ArteCampus_Service extends Class_DigitalResource_Service {
   }
 
 
+  protected function _deleteNonHarvested() {
+    return $this->_deleteNonHarvestedAlbums();
+  }
+
+
   protected function _httpGetCatalogue() : string {
-    return $this->httpGet($this->_config->getAdminVar('CATALOG_URL'));
+    return $this->httpGet($this->_config->getHarvestUrl());
   }
 }
diff --git a/library/digital_resources/ArteCampus/Service/Program.php b/library/digital_resources/ArteCampus/Service/Program.php
index 4b0c8ea02747cfe51b80a0bef0aa9b19de281f42..0325f46792be68c6288a2a508ebf543fb59e2084 100644
--- a/library/digital_resources/ArteCampus/Service/Program.php
+++ b/library/digital_resources/ArteCampus/Service/Program.php
@@ -21,6 +21,7 @@
 
 
 class ArteCampus_Service_Program extends Class_WebService_BibNumerique_RessourceNumerique {
+  const DURATION_UNIT = 'mn';
   protected
     $_directors = [];
 
@@ -35,12 +36,16 @@ class ArteCampus_Service_Program extends Class_WebService_BibNumerique_Ressource
          ->addPoster($json['media']['poster'] ?? '')
          ->setTrailers($json['media']['trailers'] ?? '')
          ->setTags($json['editorial']['keywords'] ?? [])
-         ->setDuration($json['technical']['duration'])
-         ->addAuthor($json['staff']['director'] ?? '');
+         ->setDuration($json['technical']['duration'] . self::DURATION_UNIT)
+         ->addAuthor($json['staff']['director'] ?? '')
+         ->setEditeur($json['staff']['producers'] ?? '');
 
     foreach($json['editorial']['subjects'] as $matiere)
       $this->addMatiere($matiere);
 
+    foreach($json['technical']['versions'] as $version)
+      $this->addTag($version['language']);
+
     return $this;
   }
 
@@ -52,7 +57,8 @@ class ArteCampus_Service_Program extends Class_WebService_BibNumerique_Ressource
 
   public function fillAlbum(Class_Album $album) : self {
     $album->setTypeDocId(ArteCampus_Config::getInstance()->getDocType());
-    return $this;
+    $album->getMarc()->clearZone('856');
+    return $this->updateRessourceNumeriqueNotes($album);
   }
 
 
diff --git a/library/digital_resources/ArteCampus/tests/ArteCampusTest.php b/library/digital_resources/ArteCampus/tests/ArteCampusTest.php
index 2add38a455b991455e95f96b02fe330757efeeb4..052c4732a714fc4d1b4fdad75f90970a2382ad92 100644
--- a/library/digital_resources/ArteCampus/tests/ArteCampusTest.php
+++ b/library/digital_resources/ArteCampus/tests/ArteCampusTest.php
@@ -39,7 +39,7 @@ class ArteCampusFixtures {
     $page1  = file_get_contents(__DIR__ . '/fixture.json');
     $http_client = $this->mock()
                         ->whenCalled('open_url')
-                        ->with('https://campus.arte.tv/api/list/programs?lang=fr')
+                        ->with('https://campus.arte.tv/api/list/programs?lang=fr&ent=1234')
                         ->answers($page1)
 
                         ->whenCalled('getResponse')
@@ -117,7 +117,6 @@ class ArteCampusFixtures {
 
 class ArteCampusSsoTest extends AbstractControllerTestCase {
   protected
-    $_storm_default_to_volatile = true,
     $_album,
     $_arte_fixture;
 
@@ -127,7 +126,7 @@ class ArteCampusSsoTest extends AbstractControllerTestCase {
                                    ['id' => 2,
                                     'type_doc_id' => 'ArteCampus',
                                     'titre' => 'Cultures',
-                                    'id_origine' => '88817216',
+                                    'id_origine' => '17779',
                                     'external_uri' => 'http//campus.arte.tv/album-url']);
     $this->_arte_fixture = new ArteCampusFixtures();
   }
@@ -165,7 +164,6 @@ class ArteCampusSsoTest extends AbstractControllerTestCase {
 
 
 class ArteCampusDashboardUnactivatedTest extends Admin_AbstractControllerTestCase {
-  protected $_storm_default_to_volatile = true;
 
   public function setUp() {
     parent::setUp();
@@ -189,7 +187,6 @@ class ArteCampusDashboardUnactivatedTest extends Admin_AbstractControllerTestCas
 
 
 class ArteCampusDashboardActivatedTest extends AbstractControllerTestCase {
-  protected $_storm_default_to_volatile = true;
 
   public function setUp() {
     parent::setUp();
@@ -223,7 +220,6 @@ class ArteCampusDashboardActivatedTest extends AbstractControllerTestCase {
 
 
 class ArteCampusSsoUserNotInGroupTest extends AbstractControllerTestCase {
-  protected $_storm_default_to_volatile = true;
 
   public function setUp() {
     parent::setUp();
@@ -283,14 +279,15 @@ class ArteCampusHarvestAlbumCreationTest extends ModelTestCase {
             ['getUrlOrigine', 'https://campus.arte.tv'],
             ['getExternalUri', 'https://campus.arte.tv/program/karambolage-le-hamburger-et-les-voeux'],
             ['getAnnee', '2004'],
-            ['getDuration','10'],
+            ['getDuration','10mn'],
             ['getDescription', 'Le mot : qui aurait pensé que le "hamburger", cette discutable bénédiction qui nous vient des Etats-Unis, allait un jour conquérir le monde ? L\'analyse d\'image : ensemble, nous allons regarder comment les vœux sont adressés à la nation, comment ils sont mis en scène. La collection : Un mot, un objet, une image, une coutume, une onomatopée… une devinette ! Karambolage se penche sur les particularités de la culture quotidienne française et allemande. Des regards à la fois critiques et pleins d\'humour qui décryptent nos habitudes et nos comportements.'],
             ['getTypeDocId' , 'ArteCampus'],
             ['getCategoryLabel', 'Arte Campus'],
-            ['getTags', 'hamburger;karambolage'],
+            ['getTags', 'hamburger;karambolage;Version française;Version allemande'],
             ['getMatiere','4;5' ],
             ['getPoster', 'https://vodstorage.arte.tv/educarte/illustrations/93333_affiche.jpg'],
             ['getMainAuthorName', 'Claire Doutriaux'],
+            ['getFirstEditor', 'ARTE France Développement']
     ];
   }
 
@@ -328,7 +325,7 @@ class ArteCampusHarvestAlbumCreationTest extends ModelTestCase {
 
 
 
-class ArteCampusAlreadyHarvestedNoUpdateAlbumTest extends ModelTestCase {
+class ArteCampusAlreadyHarvestedUpdateAlbumTest extends ModelTestCase {
   protected $_album;
 
   public function setUp() {
@@ -337,6 +334,8 @@ class ArteCampusAlreadyHarvestedNoUpdateAlbumTest extends ModelTestCase {
                    ['id' => 1,
                     'id_origine' => '17779',
                     'url_origine' => 'https://campus.arte.tv',
+                    'external_uri' => 'https://campus.arte.tv/il-fait-gris',
+                    'poster' => 'ilestsageilauneimage',
                     'type_doc_id' => 'ArteCampus',
                     'titre' => 'il va faire tout noir']);
 
@@ -348,9 +347,11 @@ class ArteCampusAlreadyHarvestedNoUpdateAlbumTest extends ModelTestCase {
 
   public function getAlbumAttribs() {
     return [
-            ['getTitre', 'il va faire tout noir'],
+            ['getTitre', 'Un voyage avec Martin Scorsese à travers le cinéma italien 2'],
             ['getIdOrigine', '17779'],
             ['getUrlOrigine', 'https://campus.arte.tv'],
+            ['getExternalUri', 'https://campus.arte.tv/program/un-voyage-avec-martin-scorsese-a-travers-le-cinema-italien-2'],
+            ['getPoster', 'https://vodstorage.arte.tv/educarte/illustrations/52585_affiche.jpg'],
             ['getTypeDocId' , 'ArteCampus'],
     ];
   }
@@ -364,3 +365,28 @@ class ArteCampusAlreadyHarvestedNoUpdateAlbumTest extends ModelTestCase {
     $this->assertEquals($value, call_user_func([$this->_album, $key]));
   }
 }
+
+
+
+class ArteCampusAlbumNotHarvestedShouldBeDeletedTest extends AbstractControllerTestCase {
+  protected
+    $_album,
+    $_arte_fixture;
+
+  public function setUp() {
+    parent::setUp();
+    $this->_album = $this->fixture(Class_Album::class,
+                                   ['id' => 2,
+                                    'type_doc_id' => 'ArteCampus',
+                                    'titre' => 'Cultures',
+                                    'id_origine' => '123456789',
+                                    'external_uri' => 'http//campus.arte.tv/album-url']);
+    $this->_arte_fixture = new ArteCampusFixtures();
+  }
+
+
+  /** @test */
+  public function album2ShouldHaveBeenDeletedAfterHarvest() {
+    $this->assertNull(Class_Album::find(2));
+  }
+}
diff --git a/library/digital_resources/ArteCampus/tests/fixture.json b/library/digital_resources/ArteCampus/tests/fixture.json
index 364c0b2dcee57cdfdf15e1079994296f508f11c5..623218e14284ee8f5f45ae572a9e799fa2fa4125 100644
--- a/library/digital_resources/ArteCampus/tests/fixture.json
+++ b/library/digital_resources/ArteCampus/tests/fixture.json
@@ -50,6 +50,7 @@
       "producers": "TTC Films Productions",
       "presenter": ""
     },
+    "status": "PUBLISHED",
     "media": {
       "poster": "https://vodstorage.arte.tv/educarte/illustrations/52585_affiche.jpg",
       "trailers": []
@@ -103,6 +104,7 @@
       "producers": "ARTE France Développement",
       "presenter": ""
     },
+    "status": "PUBLISHED",
     "media": {
       "poster": "https://vodstorage.arte.tv/educarte/illustrations/93333_affiche.jpg",
       "trailers":["https://vodstorage.arte.tv/trailers/129237/BA_129237_0-VOF-2.mp4","https://vodstorage.arte.tv/trailers/129237/BA_129237_0-VA-1.mp4"]
@@ -147,6 +149,7 @@
       "producers": "BFI TV",
       "presenter": ""
     },
+    "status": "PUBLISHED",
     "media": {
       "poster": "https://vodstorage.arte.tv/educarte/illustrations/12592_affiche.jpg",
       "trailers": []
@@ -204,6 +207,7 @@
       "producers": "Arte France, Artline Films",
       "presenter": ""
     },
+    "status": "PUBLISHED",
     "media": {
       "poster": "https://vodstorage.arte.tv/educarte/illustrations/000-111599_affiche.jpg",
       "trailers": []
@@ -255,6 +259,7 @@
       "producers": "Gedeon Programmes",
       "presenter": ""
     },
+    "status": "PUBLISHED",
     "media": {
       "poster": "https://vodstorage.arte.tv/educarte/illustrations/112455_affiche.jpg",
       "trailers": []
@@ -319,6 +324,7 @@
       "producers": "Arte France, Camera Lucida, Musée Du Louvre",
       "presenter": ""
     },
+    "status": "PUBLISHED",
     "media": {
       "poster": "https://vodstorage.arte.tv/educarte/illustrations/000-113493_affiche.jpg",
       "trailers": []