lovasoa / ophirofox

Une extension pour navigateur qui permet de lire les articles de presse en ligne sur le compte de bibliothèques ayant souscrit à europresse
https://ophirofox.ophir.dev
Mozilla Public License 2.0
61 stars 160 forks source link

[Presse nationale] Ajouter Télérama #216

Closed Astest12 closed 3 weeks ago

Astest12 commented 6 months ago

Bonjour, serait-il possible d’ajouter le site internet de Télérama présent dans europresse? https://www.telerama.fr Merci à vous!

lovasoa commented 6 months ago

Oui, ce serait possible! Une contribution est bienvenue!

Altonss commented 6 months ago

Les articles du site web ne semblent pas accessibles (seulement référencés). Par contre le magazine est lui bien disponible en pdf, et il serait possible d'ajouter le bouton lire sur europresse pour chaque numéro: https://www.telerama.fr/kiosque/telerama

Write commented 1 month ago

Première ébauche, avec l'aide de ChatGPT, ne pas prendre en compte le monthNames.

En collant dans la console.

Évidemment il faut modifier le link tout en bas du JS pour correspondre à votre Europresse.

Ceci n'est qu'à but de test, je ne suis pas sûr de comment intégrer ça au code vu que ça fonctionne différemment et que ça ne "consume" rien. Et aussi, car j'ai un peu la flemme.

Globalement aucune vérification n'est faite, ça ajoute juste un lien avec la date détectée + 3 jours, parce que sur Europresse, c'est systématiquement publié 3 jours après. Par chance ça nous permet d'avoir un lien statique facilement devinable.

Bref c'est un PoC qu'il faudrait travailler pour l'inclure.

// Function to format date to "YYYY-MM-DD"
function formatDate(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

// Function to add days to a given date
function addDays(date, days) {
  const result = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
}

// Get articles
const articles = document.querySelectorAll('#liste-magazine-telerama article');
console.log(`Found ${articles.length} articles.`);

// Month names mapping
const monthNames = { 
  'Janvier': 0, 'Jan.': 0, 'Janv.': 0, 'Janv': 0,
  'Février': 1, 'Fév.': 1, 'Févr.': 1, 'Févr': 1,
  'Mars': 2, 'Mar.': 2, 'Mar': 2,
  'Avril': 3, 'Avr.': 3, 'Avr': 3,
  'Mai': 4, 'Mai.': 4, 
  'Juin': 5, 'Juin.': 5,
  'Juillet': 6, 'Juil.': 6, 'Juil': 6,
  'Août': 7, 
  'Septembre': 8, 'Sep.': 8, 'Sept.': 8, 'Sept': 8,
  'Octobre': 9, 'Oct.': 9, 'Oct': 9,
  'Novembre': 10, 'Nov.': 10, 'Nov': 10,
  'Décembre': 11, 'Déc.': 11, 'Déc': 11
};

// Process each article
articles.forEach(article => {
  // Extract the date text
  const dateText = article.querySelector('p').textContent.trim();
  console.log(`Raw date text: "${dateText}"`);

  // Parse the date
  const [dayStr, monthName, yearStr] = dateText.split(' ');

  // Trim and remove any extra spaces or periods
  const cleanMonthName = monthName.trim().replace(/\./g, '');

  console.log(`Parsed - Day: ${dayStr}, Month Name: ${monthName} (Cleaned: ${cleanMonthName}), Year: ${yearStr}`);

  // Convert day and year to integers
  const day = parseInt(dayStr, 10);
  const year = parseInt(yearStr, 10);

  const month = monthNames[cleanMonthName];

  if (month === undefined) {
    console.error(`Unknown month name: "${monthName}" (Cleaned: "${cleanMonthName}")`);
    return;
  }

  console.log(`Month number: ${month}`);

  // Create date object in a robust way
  const articleDate = new Date(year, month, day);
  console.log(`Article date: ${articleDate}`);

  // Check if the date object is valid
  if (isNaN(articleDate.getTime())) {
    console.error(`Invalid date: ${year}-${month + 1}-${day}`);
    return;
  }

  // Calculate the new date + 3 days
  const newDate = addDays(articleDate, 3);
  const formattedDate = formatDate(newDate);
  console.log(`New date + 3 days: ${formattedDate}`);

  // Generate the link
  const link = `https://nouveau-europresse-com.acces-distant.bnu.fr/PDF/EditionDate?sourceCode=TA_P&singleDate=${formattedDate}&useFuzzyDate=false`;
  console.log(`Generated link: ${link}`);

  // Create a new anchor element
  const linkElement = document.createElement('a');
  linkElement.href = link;
  linkElement.target = '_blank'; // Open the link in a new tab
  linkElement.textContent = "Lire sur Europresse";

  // Inject the link into the article
  article.appendChild(linkElement);
});
Altonss commented 1 month ago

Le POC fonctionne très bien :)