Projet

Général

Profil

Demande #3718 » feed2lav.pl

new revision adding podcasts for topics - Gérald Sédrati-Dinet, 15/06/2019 14:09

 
1
#! /usr/bin/perl -CAS
2
# Gérald Sédrati-Dinet
3
# Frédéric Couchet
4
# License : WTFPL
5
#  DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
6
#  Version 2, December 2004
7
#
8
#  Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
9
#
10
#  Everyone is permitted to copy and distribute verbatim or modified
11
#  copies of this license document, and changing it is allowed as long
12
#  as the name is changed.
13
#
14
#  DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
15
#  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
16
#
17
#  0. You just DO WHAT THE FUCK YOU WANT TO.
18

    
19
use 5.014;
20
use utf8;
21
use open qw(:std :encoding(UTF-8));
22
use LWP::Simple;
23
use XML::RSS;
24
use DateTime;
25
use DateTime::Format::DateParse;
26

    
27
# Configuration variables
28
my $url = "https://www.april.org/taxonomy_all_items/term/1917/all/feed";
29
my $filename = "/usr/share/drupal6/lav.xml";
30

    
31
# Build RSS object
32
my $rss = XML::RSS->new;
33

    
34
# Fetch Drupal feed
35
my $in_file = get($url);
36
die "Couldn't get $url\n!" unless defined $in_file;
37

    
38
# Parse RSS
39
open(my $fh, '>:encoding(UTF-8)', $filename) or die "Could not open file '$filename' $!";
40
$rss->parse($in_file);
41

    
42
# Add description
43
$rss->{channel}->{description} = "<p>Chaque mardi de 15 h 30 à 17 h 00, l'April, l'association de promotion et de défense du logiciel libre, propose une émission de radio d'explications et d'échanges concernant les dossiers politiques et juridiques que l'association traite et les actions qu'elle mène : <a href=\"https://april.org/libre-a-vous\">Libre à vous !</a>. Une partie de l'émission est également consacrée aux actualités et actions de type sensibilisation. L'émission est diffusée sur radio Cause Commune sur la bande FM en Île-de-France (93.1) et <a href=\"https://cause-commune.fm\">sur le site web de la radio</a>.</p><p>Donner à chacun et chacune, de manière simple et accessible les clefs pour comprendre les enjeux mais aussi proposer des moyens d'action, tel est l'objectif de l'émission.</p>";
44

    
45
# Add image
46
$rss->image(title=>'Libre à vous !', url=>'https://april.org/files/libre-a-vous/banniere-radio-april-rss-200.png', link=>'https://april.org/libre-a-vous');
47

    
48
# Parse items
49
my @new_items;
50
foreach my $item (@{$rss->{'items'}}) {
51
  # Add mp3 enclosure
52
  my $ogg_enclosure = $item->{enclosure};
53
  if ($ogg_enclosure and ($ogg_enclosure->{type} eq 'audio/ogg' or $ogg_enclosure->{type} eq 'application/ogg')) {
54
    my $mp3_enclosure;
55
    $mp3_enclosure->{type} = 'audio/mpeg';
56
    $mp3_enclosure->{length} = $ogg_enclosure->{length};
57
    ($mp3_enclosure->{url} = $ogg_enclosure->{url}) =~ s/\.ogg$/.mp3/;
58
    $item->{enclosure} = [$ogg_enclosure, $mp3_enclosure];
59
  }
60

    
61
  # Add items for each topic
62
  if ($item->{description} =~ /Podcasts des différents sujets abordés.+?<ul>(.+?)<\/ul>/s) {
63
    # Extract topics
64
    my $topics = $1;
65

    
66
    # Add current item to items list so new item for each topic goes after this one
67
    push @new_items, $item;
68

    
69
    # Parse each topic
70
    while ($topics =~ /<li><a href="([^"]+)">([^>]+)<\/a>/g) {
71
      # Extract ogg url for enclosures
72
      my ($ogg_url, $title) = ($1, $2);
73
      (my $mp3_url = $ogg_url) =~ s/\.ogg$/.mp3/;
74

    
75
      # Extract date for description
76
      my $date = DateTime::Format::DateParse->parse_datetime($item->{pubDate})->set_locale('fr')->strftime("%A %d %B %Y");
77

    
78
      # Build new item for this topic
79
      my %new_item = %$item;
80
      $new_item{title} = $title;
81
      $new_item{description} = <<"__HTML__";
82
<p><a href="https://april.org/libre-a-vous"><em>Libre à vous !</em></a>, l'émission pour comprendre et agir avec l'April, chaque mardi de 15h30 à 17h sur la radio <em>Cause commune</em> (93.1 FM en Île-de-France et sur <a href="https://causecommune.fm">Internet</a>.</p>
83

    
84
  <p><em>Émission « Libre à vous ! »</em> diffusée $date, partie « $title »</p>
85
__HTML__
86
      $new_item{category} = 'Podcast Libre à vous !';
87
      $new_item{enclosure} = [{length => 0, type => 'audio/ogg', url => $ogg_url}, {length => 0, type => 'audio/mpeg', url => $mp3_url}];
88

    
89
      # Add new item in items list
90
      push @new_items, \%new_item;
91
    }
92
  } else {
93
    # Add current item to items list
94
    push @new_items, $item;
95
  }
96
}
97

    
98
# Replace list of items
99
$rss->{items} = \@new_items;
100

    
101
# Output RSS
102
print $fh $rss->as_string;
103

    
104
close $fh;
(2-2/2)