Рубрики
Без рубрики

Создание собственного веб-сайта смешанных новостей бесплатно от «Эхо-камера» Алгоритмы содержимого 📰

Описание пользовательских новостей сайта тянет заголовки из смеси RSS-каналов. Помечено с AWS, Hugo, Python.

Я был разочарован своими различными новостями, чтобы показать одинаковый тип контента, с сенсационными заголовками, повторным применением моего эхо-камера Отказ Кроме того, я часто читаю заголовок и удивляюсь, как «другую сторону» сообщит о такой же истории. Я хотел иметь простой веб-сайт с выборкой заголовков, представляющих либеральные, консервативные и некоторые международные перспективы.

Учитывая мой страх перед всеми вещами Frontend, я создал простой сайт с Hugo, статическим генератором сайта. Я использовал Python, чтобы прочитать набор RSS-каналов и создавать файлы разметки содержимого на основе первых нескольких записей. Код в Github И сайт находится в https://onlineheadlines.net.

Вот несколько основных моментов:

Чтение каналов

Мое оригинальное видение было посещение каждого новостного сайта и эффективно Scrape H1 как верхний заголовок. Но, предполагая, что сайты будут слишком разными, чтобы эффективно сделать это, я решил сосредоточиться на RSS-каналах (которые все еще живы и пинают!).

Я использовал модуль FeedParser, чтобы прочитать каналы. Я повторяю на массив кормов и прочитал их.

    for feed in FEEDS:
        count = count + 1
        NewsFeed = feedparser.parse(feed)

Как и большинство вещей в Python, данные возвращаются в красивые словарные объекты.

{
    "title": "The warning isn't new. Experts have long cautioned the months ahead will be challenging. Here's why.",
    "link": "http://rss.cnn.com/~r/rss/cnn_topstories/~3/b-gJezqWSTM/index.html",
    "summary": "Nearly 30 US states are reporting downward trends in...",
    "media_content": [
        {
            "url": "https://cdn.cnn.com/cnnnext/dam/assets/200911014935-us-coronavirus-friday-0906-restricted-super-169.jpg"
        }
    ],

    ...

}

Создание файлов разметки содержимого

Чтобы создать файлы Markdown, я схватил ключевые поля из RSS JSON и поместите их в формату. Python имеет объект под названием F-Strings, которые позволяют вам форматировать многолетние строки и легко вставлять значения вариабели.

template = f"""---
title: "{title}"
date: {published}
{image_url_front}
target_link: {link}
type: {content_type}
categories:
    - {content_type}
---
{summary}"""

Результирующая строка выглядит как стандартная передняя вещество и формат Markdown для содержимого сайта, вроде здесь на dev.to.

---
title: "The warning isn't new. Experts have long cautioned the months ahead will be challenging. Here's why."
date: 

target_link: http://rss.cnn.com/~r/rss/cnn_topstories/~3/b-gJezqWSTM/index.html
type: first_headline
categories:
    - first_headline
---
Nearly 30 US states are reporting downward trends in...

Я просто сохраняю файлы в соответствующий подкаталог Hugo.

Генерация сайта

Hugo – это типичный статический генератор сайта, который предварительно создает все HTML и папки, чтобы обеспечить простой, красивый опыт навигации URL. Создание сайта генерирует полный сайт в публике/папке.

У Уго есть много созданных сообществ. Я выбрал Hugo-Xmag Потому что это выглядело как газета.

У создателя Theme есть Интересная перспектива На том, как он создал тему, чтобы избежать беспорядка современных веб-сайтов и сосредоточиться на статьях.

Создание сайта

Вот где веселье превратилось в самоотносительную боль. Существуют простые варианты для CI и хостинга, такие как NetLify, который бы построить и развернут на основе изменений в Master. Но я хотел попытаться получить статический сайт S3, с пользовательским доменным именем и SSL CERT. Я потерпел неудачу при этом когда-то раньше и хотел посмотреть, смогу ли я получить его на работу.

Я обычно использую AWS CodePipeline для сборки, так как это так легко настроить. Но у меня есть процесс, который отправляет электронные письма по созданию прогресса для каждой сборки CodePipine, и я не хотел наводнения электронных писем, если я собираюсь построить сайт каждый час. Поскольку CodePipipeline и CodeBuild по сути, по сути, просто недолговечные контейнеры для выполнения шага вашего сборки, я создал Пользовательский контейнер С Python, Hugo, My Hugo сайт и моим сценарием сборки.

...

RUN apt-get install -y curl wget

# Install Hugo
RUN curl -L -o hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.70.0/hugo_0.70.0_Linux-64bit.deb
RUN dpkg -i hugo.deb


# Install AWS CLI
RUN pip install awscli

# Copy directory files for Hugo site
COPY ./ ./
RUN ls -la headlines_site/

...

Я также создал сценарий для построить контейнер Локально и подтолкните его к AWS ECR как мой реестр контейнера. Я запланировал Фаргатскую задачу, чтобы запускать контейнер каждый час. Я знал, что Fargate был «сервисом Serverless» (прочитал: «управляемый») для запуска контейнеров и думал, что будет легко настроить. Но мне потребовалось некоторое время, чтобы получить услуги, задачи и контейнер, которые работают вместе.

Хостинг сайта

Именно здесь большинство разочарований произошло, что удивило меня, поскольку я просто принимая статический сайт S3. Вот вопросы, которые я столкнулся с:

  • Использование пользовательского доменного имени с веб-сайтом S3 требует CloudFront (насколько я мог сказать)
  • Cloudfront не автоматически уважает автоматически уважать index.html в подпапках, которые предотвратили работу Hugo Conly Url (например, https://onlineheadlines.net/about ). К счастью, цифровые моряки созданы Стандартные перенаправления – для облачной точки дать URL уважение, которое они заслуживают.
  • Использование маршрута 53 и Cloudfront для доменного имени и SSL CERT требует, чтобы вы знали, что вы делаете с DNS (A и CNAME Records, с и без « www». ). К сожалению, мой страх на сеть – это так же здорово, как мой страх перед Frontend.

Даже со всеми разочарованиями это был хороший опыт обучения с некоторыми извлеченными уроками, которые я могу подать заявку на работу, когда я помогаю другим командам.

Оригинал: “https://dev.to/stevezieglerva/creating-my-own-mixed-news-website-free-from-echo-chamber-content-algorithms-55p0”