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": []