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

Cross-Post от вашего блога в dev.to (script node.js)

Dev.to – отличное место для технического блога. Сайт чувствует себя легким и легко навигация, и … Tagged with Node, производительность, WebDev, JavaScript.

Dev.to – отличное место для технического блога. Сайт кажется легким и простым в навигации, а сообщество приветствует. Тем не менее, вы можете сначала опубликовать свой контент под собственным доменом, который у вас есть полный контроль. Затем вы можете захотеть пересечь, чтобы разработать по ссылке на канонический URL.

Когда я начал писать изначально, мой рабочий процесс был таким:

  • Напишите сообщение в блоге, не выходя из моего текстового редактора на местном уровне
  • Публикуйте в моем личном блоге
  • Перекрестный пост, чтобы разработать вручную

Последняя часть определенно требовала автоматизации. Есть способ Публикуйте из RSS Но я понял, что некоторые изменения должны быть внесены в контент, прежде чем он может быть опубликован на Dev.

Другой подход – использовать Dev API. Мой блог построен с Месяти лет И я добавил небольшой вспомогательный сценарий NPM, чтобы помочь с перекрестным сообщением. Он загружает сообщение в блоге из файла Markdown, публикует проект в Dev и возвращает URL -адрес проекта. Там вы можете убедиться, что все выглядит хорошо (Иногда мне может потребоваться скорректировать теги) и нажимать Публиковать Анкет

Рабочий процесс теперь выглядит так:

  • Напишите сообщение в блоге, не выходя из моего текстового редактора на местном уровне
  • Публикуйте в моем личном блоге
  • Запустить npm run → Следите за проектом ссылки на обзор → Публиковать

Если это звучит полезно, ниже приведено (дружественное для начинающих) руководство по добавлению такого сценария в свой собственный блог.

Создайте ключ Dev API

В вашем профиле разработчика перейдите к НастройкиУчетная записьDev Community API -ключи

Дайте клавишу имя (например,

Скопируйте ключ и поместите его в .env файл в корне вашего блога. Убедитесь, что этот файл указан в .gitignore Поскольку мы не хотим, чтобы секреты приземлились в репозитории GIT.

.env

DEV_TO_API_KEY=your-api-key

Сценарий NPM, чтобы опубликовать в Dev

Если не установлено, вам нужно будет добавить эти пакеты в зависимости Dev:

npm i --save-dev dotenv gray-matter node-fetch

Вы можете найти весь скрипт здесь: https://github.com/maximivanov/maxivanov.io/blob/main/scripts/publish-to-devto.js

Для начала мы загружаем .env Файл, включите зависимости и настройте некоторые настройки.

./scripts/publish-to-devto.js

require('dotenv').config() // make the API key available as an environment variable

const matter = require('gray-matter') // library to parse front-matter and content from posts' markdown files
const fetch = require('node-fetch')

const apiKey = process.env.DEV_TO_API_KEY
const apiUrl = 'https://dev.to/api/articles'
const siteUrl = 'https://www.maxivanov.io' // hostname of the blog
const autoPublish = false // whether we want to publish or create drafts

Основной орган сценария, который получает данные, отправляет запрос API и печатает проект URL:

./scripts/publish-to-devto.js

...

;(async () => {
    const path = process.argv.slice(2)[0] // read file name from command line arguments
    const file = matter.read(path)

    const payload = getPayload(file) // get payload to publish to DEV API (see below)
    const article = await publish(payload)

    if (autoPublish) {
        console.log(`Article published: ${article.url}`)
    } else {
        console.log(`Article draft created: ${article.url}/edit`)
    }
})()

Функция для подготовки данных для публикации в API:

./scripts/publish-to-devto.js

...

function getPayload(file) {
    return {
        article: {
            title: file.data.title.trim(),
            // replace relative paths with absolute URLs
            body_markdown: file.content.trim().replace(/\]\(\/posts\//gm, `](${siteUrl}/posts/`),
            published: autoPublish,
            // if you want blog post to be a part of Series on DEV
            series: undefined,
            // cover image URL
            main_image: file.data.image ? `${siteUrl}${file.data.image}` : undefined,
            // generate the canonical url (file name minus .md in my case)
            canonical_url: `${siteUrl}/${file.path.split('/').slice(-2, -1)[0]}`,
            description: file.data.description,
            // DEV allows only 4 tags and they must be alphanumeric
            tags: file.data.tags.slice(0, 4).map(tag => tag.toLowerCase().replace(/[^a-z0-9]/i, '')),
        }
    }
}

И, наконец, функция публикации подготовленной полезной нагрузки в API:

./scripts/publish-to-devto.js

...

async function publish(payload) {
    const response = await fetch(apiUrl, {
        method: 'post',
        body: JSON.stringify(payload),
        headers: {'Content-Type': 'application/json', 'api-key': apiKey}
    });

    const json = await response.json();
    if (json.error) {
        throw new Error(`API returned an error: ${json.error}`)
    }

    return json
}

Добавьте новый сценарий в Package.json :

./package.json

{
  ...
  "scripts": {
    ...
    "publish-to-devto": "node ./scripts/publish-to-devto.js"
  }
}

И позвоните в командную строку:

npm run publish-to-devto posts/2021/01/add-docker-container-name-to-shell-prompt.md

Хорошо! Мы только что избавились от скучной ручной работы, которая всегда хороша.

Оригинал: “https://dev.to/maxivanov/cross-post-from-your-blog-to-dev-to-node-js-script-59j4”