• Stars
    star
    2,978
  • Rank 15,189 (Top 0.3 %)
  • Language
    JavaScript
  • License
    GNU Affero Genera...
  • Created over 4 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Show your latest blog posts from any sources or StackOverflow activity or Youtube Videos on your GitHub profile/project readme automatically using the RSS feed

Blog post workflow Build and test

preview

How to use

  1. Star this repo 😉
  2. Go to your repository
  3. Add the following section to your README.md file, you can give whatever title you want. Just make sure that you use <!-- BLOG-POST-LIST:START --><!-- BLOG-POST-LIST:END --> in your readme. The workflow will replace this comment with the actual blog post list:
    # Blog posts
    <!-- BLOG-POST-LIST:START -->
    <!-- BLOG-POST-LIST:END -->
  4. Create a folder named .github and create a workflows folder inside it, if it doesn't exist.
  5. Create a new file named blog-post-workflow.yml with the following contents inside the workflows folder:
    name: Latest blog post workflow
    on:
      schedule: # Run workflow automatically
        - cron: '0 * * * *' # Runs every hour, on the hour
      workflow_dispatch: # Run workflow manually (without waiting for the cron to be called), through the GitHub Actions Workflow page directly
    permissions:
      contents: write # To write the generated contents to the readme
    
    jobs:
      update-readme-with-blog:
        name: Update this repo's README with latest blog posts
        runs-on: ubuntu-latest
        steps:
          - name: Checkout
            uses: actions/checkout@v3
          - name: Pull in dev.to posts
            uses: gautamkrishnar/blog-post-workflow@v1
            with:
              feed_list: "https://dev.to/feed/gautamkrishnar,https://www.gautamkrishnar.com/feed/"
  6. Replace the above URL list with your own RSS feed URLs. See popular-sources for a list of common RSS feed urls.
  7. Commit and wait for it to run automatically, or you can also trigger it manually to see the result instantly. To trigger the workflow manually, please follow the steps in the video.

Options

This workflow has additional options that you can use to customize it for your use case. The following are the list of options available:

Option Default Value Description Required
feed_list "" Comma-separated list of RSS feed urls, eg: https://example1.com,https://example2.com Yes
max_post_count 5 Maximum number of posts you want to show on your readme, all feeds combined No
readme_path ./README.md Comma separated paths of the readme files you want to update No
gh_token your GitHub token with repo scope Use this to configure the token of the user that commits the workflow result to GitHub No
comment_tag_name BLOG-POST-LIST Allows you to override the default comment tag name (<!-- BLOG-POST-LIST:START --><!-- BLOG-POST-LIST:END -->), if you want to show multiple instances of the action on the same repo, see advanced usage for more info No
disable_sort false Disables the sorting of the list based on publish date No
feed_names "" Comma-separated list of RSS feed names, this is intended to be used with template option. eg: Blog,Dev.to No
template default Allows you to change the structure of the posts list by using different variables. By default this workflow uses markdown list format to render the posts, you can override this behavior using this option. Eg: [$title]($url) will give you a space-separated list of posts.

Supported variables
  • $title: Title of the post
  • $url: URL of the post
  • $description: Description of the post
  • $newline: Inserts a newline
  • $date: Inserts the post date based on the date_format specified
  • $randomEmoji: Allow you to use random emojis in the post, pass emojis as the parameter to chose one of it randomly in each post item. Eg: $randomEmoji(💯,🔥,💫,🚀,🌮). See the issue comment for more details
  • $emojiKey: You can use this argument to show emojis on each of your post item sequentially in the order you specify. Example: $emojiKey(💯,🔥,💫). See the issue comment for more details
  • $counter: You can use this argument to show a serial number on each of your post items.
  • $feedName: You can use this argument to show a string that represents your website name, use feed_names argument to specify it for each feed item. Eg: feed_list: "https://dev.to/feed/gautamkrishnar,https://www.gautamkrishnar.com/feed/", feed_names: "Dev.to,Personal Website"
  • $categories: You can use this to show a comma separated list of post categories if available. See this issue for more details
No
categories_template default By default $categories variable in the template is a comma separated string of categories. This option will allow you override it and customize the category item according to your use case. Following are the variables available:
  • $category: Represents individual category item
eg: <code>$category</code> will show category list as category1 category2 category3 etc
No
date_format UTC:ddd mmm dd yyyy h:MM TT Allows you to change the format of the date or time displayed when using the $date in the template option. This uses NPM dateformat library, please read the library documentation for the supported formats No
user_agent rss-parser Allows you to customize the user agent used by the RSS feed crawler No
accept_header application/rss+xml Allows you to customize the accept header of the http requests No
tag_post_pre_newline true if you are not using template option Allows you to insert a newline before the closing tag and after the opening tag when using the template option if needed, for better formatting No
filter_comments medium,stackoverflow/Comment by $author/,stackexchange/Comment by $author/ Comma separated list of platforms you want to enable the comment filter.

Available filters
  • medium: Allows you to filter out the Medium comments. Known issue: #37
  • stackoverflow/Comment by $author/: Allows you to filter out the StackOverflow comments. Argument to this filter is optional, it defaults to 'Comment by $author'. If you use any language other than English on StackOverflow, you can use this argument to customize it. See #16 for more info.
  • stackexchange/Comment by $author/: Allows you to filter out the StackExchange comments. Argument to this filter follows the same format as stackoverflow filter's argument.
No
custom_tags "" Allows you to use the custom tags from your feed items in your template. Format: variableName/tagName/,variableName/tagName/. Please see the issue comment for more details No
title_max_length "" Allows you to trim the title in the posts list, excess text will be appended with an ellipsis ... No
description_max_length "" Allows you to trim the description in the posts list, excess text will be appended with an ellipsis ... No
item_exec "" Allows you to execute custom JavaScript code on each post item fetched from the xml to do advanced text manipulation. Please see the issue comment as an example No
commit_message Updated with the latest blog posts Allows you to customize the commit message No
committer_username blog-post-bot Allows you to customize the committer username No
committer_email [email protected] Allows you to customize the committer email No
output_only false Sets the generated array as results output variable so that it can be consumed in other actions and parsed via utilities like jq. This will also prevent committing to readme. See #51 for more details about the output format and how to use it. This will also generate a JSON file named /tmp/blog_post_workflow_output.json that you can use to consume the generated data and avoid issues like #110. No
enable_keepalive true Workflow will automatically do a dummy commit to keep the repository active if there is no commit activity for the last 50 days. GitHub will stop running all cron based triggers if the repository is not active for more than 60 days. This flag allows you to disable this feature. See #53 for more details. No
retry_count 0 Maximum number of times to retry the fetch operation if it fails, See #66 for more details. No
retry_wait_time 1 Time to wait before each retry operation in seconds. No
disable_html_encoding false Disables html encoding of the feed contents. No
disable_item_validation false Disables the validation checks for Title, publish date and URL. No
filter_dates "" Allows you to filter post items based on date range.

Supported Values
  • daysAgo/N/: Use this value to display only the posts from the last N days. eg: daysAgo/10/ will show only posts from last 10 days.
  • currentMonth: Use this value to display the post that are published on current month.
  • currentYear: Use this value to display the post that are published on current year.
Make sure that you set the max_post_count to a higher value to get rid of max post count filtering, before using the above options.
No
rand_seed "username/repository" Provide your own seeding string for the randomness. More info: #152 No
remove_duplicates false Allows you to remove duplicate blog posts from multiple sources, if are cross posting. This filters contents based on blog post's title. No
skip_commit false Allows you to prevent the workflow from creating a new commit in the repository. Nevertheless of this option, changes to the readme will be made. This is particularly useful if you want to do the commits manually using the git cli or another workflow. One of the important thing to note is that the workflow will still do the keepalive commits, if you want to disable it you can use the enable_keepalive option instead. No

Advanced usage examples

Click to expand:

StackOverflow example

The following configuration allows you to show your latest StackOverflow activity along with your latest blog posts in the GitHub profile or project readme:

  1. Follow the steps mentioned in the how to use section.
  2. Add the following section to your README.md file, you can give whatever title you want. Just make sure that you use <!-- STACKOVERFLOW:START --><!-- STACKOVERFLOW:END --> in your readme. The workflow will replace this comment with the actual StackOverflow activity:
    # StackOverflow Activity
    <!-- STACKOVERFLOW:START -->
    <!-- STACKOVERFLOW:END -->
  3. Create stack-overflow-workflow.yml in your workflows folder with the following contents, replace 4214976 with your StackOverflow user ID:
    name: Latest stack overflow activity
    on:
      schedule:
        # Runs every 5 minutes
        - cron: '*/5 * * * *'
      workflow_dispatch:
    permissions:
      contents: write
      
    jobs:
      update-readme-with-stack-overflow:
        name: Update this repo's README with latest activity from StackOverflow
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - uses: gautamkrishnar/blog-post-workflow@v1
            with:
              comment_tag_name: "STACKOVERFLOW"
              commit_message: "Updated readme with the latest stackOverflow data"
              feed_list: "https://stackoverflow.com/feeds/user/4214976"
See the result!

advanced

Blog post table
workflow.yml
name: Latest stack oveflow activity
on:
  workflow_dispatch:
  schedule:
    - cron:  '0 * * * *'
permissions:
      contents: write
jobs:
  update-readme-with-blog:
    name: Update this repo's README with latest activity from StackOverflow
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: gautamkrishnar/blog-post-workflow@v1
        with:
          comment_tag_name: "STACKOVERFLOW"
          feed_list: "https://stackoverflow.com/feeds/user/4214976"
          template: "<tr><td>$title</td><td>$url</td></tr>"
Readme.md
### Latest StackOveflow activity of [@gautamkrishnar](https://github.com/gautamkrishnar)
<table>
  <tr><th>Title</th><th>Link</th></tr>
  <!-- STACKOVERFLOW:START --><!-- STACKOVERFLOW:END -->
</table>

Preview: https://github.com/gkr-bot/gkr-bot#latest-stackoveflow-activity-of-gautamkrishnar

Results

image

Youtube videos table
workflow.yml
name: Latest YouTube Videos
on:
  schedule:
    # Runs every hour, on the hour
    - cron: "0 * * * *"
  workflow_dispatch:
permissions:
      contents: write

jobs:
  update-readme-with-youtube:
    name: Update this repo's README with latest videos from YouTube
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: gautamkrishnar/blog-post-workflow@master
        with:
          feed_list: "https://www.youtube.com/feeds/videos.xml?channel_id=UCtvnB6R__6vdyjUEbDgAWHw"
          custom_tags: "channelId/yt:channelId/,videoId/yt:videoId/"
          date_format: "mmm d, yyyy"
          template: '<table><tr><td><a href="$url"><img width="140px" src="http://img.youtube.com/vi/$videoId/maxresdefault.jpg"></a></td>$newline<td><a href="$url">$title</a><br/>$date</td></tr></table>$newline'
          committer_email: "[email protected]"

Preview: https://github.com/Dexters-Hub/Dexters-Hub

Results

image

Latest Podcast Episode from Anchor
workflow.yml
name: Latest RadioGeek (Anchor)
on:
  schedule:
    # Runs “At 00:00 on Friday.”
    - cron: '0 0 * * FRI'
  workflow_dispatch:

jobs:
  update-readme-with-anchor:
    name: Update this repo's README with latest RadioGeek podcast feed from Anchor
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: gautamkrishnar/blog-post-workflow@master
        with:
          comment_tag_name: "RadioGeek-Anchor-feed"
          feed_list: "https://anchor.fm/s/6048890/podcast/rss"
          max_post_count: 1000
          commit_message: "🔥Update with lastest RadioGeek feed"
          committer_username: "🤖RadioGeek-Bot"
          committer_email: "<>"
          date_format: 'UTC: yyyy-mm-dd'
          template: "$newline #### - [$title]($url) $newline <details><summary>توضیحات</summary> $description </details> $newline <hr /> $newline"
          # Regex for remove HTML TAG:    /(<([^>]+)>)/ig
          item_exec: "post.description = post.description.replace('','')"
          disable_html_encoding: true

by : Mahdi Qiamast

Results

01 02

Popular Sources

Some popular blogging platforms and their RSS feed URLs (Click to expand)
Name Feed URL Comments Example
Dev.to https://dev.to/feed/username Replace username with your own username https://dev.to/feed/gautamkrishnar
Wordpress https://www.example.com/feed/ Replace with your own blog url https://www.gautamkrishnar.com/feed/
Medium https://medium.com/feed/@username Replace username with your Medium username https://medium.com/feed/@khaosdoctor
Medium (Sub Domain) https://username.medium.com/feed Replace username with your Medium username https://timsneath.medium.com/feed
Stackoverflow https://stackoverflow.com/feeds/user/userid Replace with your StackOverflow UserId https://stackoverflow.com/feeds/user/5283532
StackExchange https://subdomain.stackexchange.com/feeds/user/userid Replace with your StackExchange UserId and sub-domain https://devops.stackexchange.com/feeds/user/15
Ghost https://www.example.com/rss/ Replace with your own blog url https://blog.codinghorror.com/rss/
Drupal https://www.example.com/rss.xml Replace with your own blog url https://www.arsenal.com/rss.xml
Hugo https://BASE_URL/post/index.xml Replace BASE_URL(doc) with your blog url. Refer to the official Hugo or your theme documentation for more info https://davidaparicio.gitlab.io/website/fr/post/index.xml
Youtube Playlists https://www.youtube.com/feeds/videos.xml?playlist_id=playlistId Replace playlistId with your own Youtube playlist id https://www.youtube.com/feeds/videos.xml?playlist_id=PLJNqgDLpd5E69Kc664st4j7727sbzyx0X
Youtube Channel Video list https://www.youtube.com/feeds/videos.xml?channel_id=channelId Replace channelId with your own Youtube channel id https://www.youtube.com/feeds/videos.xml?channel_id=UCDCHcqyeQgJ-jVSd6VJkbCw
Anchor.fm Podcasts https://anchor.fm/s/podcastId/podcast/rss You can get the rss feed url of a podcast by following these instructions https://anchor.fm/s/1e784a38/podcast/rss
Hashnode https://@username.hashnode.dev/rss.xml Replace @username with your Hashnode username https://polilluminato.hashnode.dev/rss.xml
Google Podcasts https://podcasts.google.com/feed/channelId Replace channelId with your Google podcast channel Id https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zb3VuZGNsb3VkLmNvbS91c2Vycy9zb3VuZGNsb3VkOnVzZXJzOjYyOTIxMTkwL3NvdW5kcy5yc3M=
Reddit http://www.reddit.com/r/topic/.rss You can create an RSS feed by adding '.rss' to the end of an existing Reddit URL. Replace topic with SubReddit topic that interest you or localized to you. http://www.reddit.com/r/news/.rss
Analytics India Magazine https://analyticsindiamag.com/author/author_name/feed/ Replace author_name with your name https://analyticsindiamag.com/author/kaustubhgupta1828gmail-com/feed/
Feedburner https://feeds.feedburner.com/feed_address Replace feed_address with your Feedburner feed address https://feeds.feedburner.com/darkwood-fr/blog
Tumblr https://blog_name.tumblr.com/rss or https://example.com/rss You can create an RSS feed by adding '/rss' to your main blog page or to your own domain if it is configured. Replace blog_name with your blog name https://goggledoddle.tumblr.com/rss
Blogger https://blog_name.blogspot.com/feeds/posts/default Replace blog_name with your blog subdomain https://singlebucks.blogspot.com/feeds/posts/default
Velog https://v2.velog.io/rss/userid Replace userid with your user id (without the @ symbol) https://v2.velog.io/rss/minnczi
Shouts.dev https://shouts.dev/feed/username Replace username with your own username https://shouts.dev/feed/obydul

Examples

FAQs and Common issues

Demo video

Please see the video by @codeSTACKr.

Contributing

Please see CONTRIBUTING.md for getting started with the contribution.

Make sure that you follow CODE_OF_CONDUCT.md while contributing and engaging in the discussions.

When contributing, please first discuss the change you wish to make via an issue on this repository before making the actual change.

ToDo

  • Add more sources
  • Fix bugs if any

Bugs

If you are experiencing any bugs, don’t forget to open a new issue.

Thanks to

jetbrains tutanota.com

Liked it?

Hope you liked this project, don't forget to give it a star ⭐.

chart

More Repositories

1

nothing-private

Do you think you are safe using private browsing or incognito mode?. 😄 👿 This will prove that you're wrong.
JavaScript
2,001
star
2

motrix-webextension

A browser extension for the Motrix Download Manager
JavaScript
1,213
star
3

socli

Stack overflow command line client. Search and browse stack overflow without leaving the terminal 💻
Python
1,096
star
4

tcso

Try Catch Stack overflow (TcSo) Is a collection of Try statements in all the programming languages under the globe which catches the exception and searches for the cause of the caught exception in the stack overflow automatically.
JavaScript
278
star
5

github-pages-gallery

A zero dollar solution to host your photo/video gallery online using Github pages and GitHub Actions. No coding necessary.
CSS
174
star
6

keepalive-workflow

GitHub action to prevent GitHub from suspending your cronjob based triggers due to repository inactivity
JavaScript
170
star
7

gautamkrishnar

Yet another GitHub profile readme 😃
156
star
8

refined-github-feeds

This browser extension enables you to filter the GitHub news feeds based on different event types.
JavaScript
61
star
9

Be-Like-Bill

Be Like Bill meme generator and API created with PHP, Using this API you can include customised version of "Be like Bill" meme on your website.
PHP
55
star
10

Openbooks

An online reopository to share books. Created in the loving memory of the internet's own boy Aaron swartz, on his birthday.
HTML
49
star
11

Lychee-openshift-quickstart

OpenShift Lychee Quickstart
PHP
12
star
12

hatter

An AIML Python chat bot
Python
11
star
13

grav-openshift-quickstart

OpenShift Grav Quickstart
PHP
9
star
14

naughtychecker.js

NodeJS module to check Naughty Strings, it is a set of strings which have a high probability of causing issues when used as user-input data.
JavaScript
9
star
15

unijson.php

A universal PHP script to generate JSON from any MySQL database
PHP
6
star
16

Anchor-CMS-openshift-quickstart

OpenShift Anchor CMS Quickstart
PHP
6
star
17

Codiad-openshift-quickstart

OpenShift Codiad Web IDE Quickstart
PHP
5
star
18

homebrew-socli

Homebrew formula for the socli on macOS and linux
Ruby
3
star
19

Shell-Scripts

A collection of useful shell scripts for daily use. It will surely saves you a lots of time.
Shell
3
star
20

CodeIgniter-openshift-quickstart

OpenShift CodeIgniter Quickstart
HTML
3
star
21

ASTRA

A fully integrated workflow management system for government offices with built in queuing and complaint registration system.
JavaScript
3
star
22

profanity-finder.js

Simple profanity finding library for javascript to detect swear language.Created for nodejs.
JavaScript
3
star
23

gautamkrishnar.github.io

Personal website
HTML
2
star
24

Easy-folder-creator

Create 100s or 10000s of folders at a time. Just enter the required number of folders and the app will create it for you.
C++
2
star
25

azure-extplorer-extension

Extplorer extension for Microsoft Azure Websites
PHP
2
star
26

mac-toolkit

A set of tools to fine tune your Mac experience
Swift
1
star
27

joker

Random jokes from the best sources...
Python
1
star
28

Simple-referrer

A databaseless rerrer tracker written in javascript and php.
JavaScript
1
star
29

MSP-Resources

A repository of presentations and resources on Microsoft products for Microsoft student partners and fans
1
star
30

exobay

A self-hosted, OpenSource, Extensible API / Website performance and uptime monitoring service
HTML
1
star
31

Ensemble-16-website

Website of Ensemble 16 techno fest of Computer Science and Engg, Rajiv Gandhi Institute of Technology Kottayam
CSS
1
star
32

php-file-uploader

PHP file uploader with progress bar
PHP
1
star
33

hungrymenot

hungrymenot website
PHP
1
star
34

Christmas-Quiz

A Christmas quiz created in python
1
star
35

IEEE-Zeus-2.0

Source code of IEEE Zeus 2.0 website, Zeus is the signature event of IEEE RIT SB.
CSS
1
star
36

IEEE-Zeus-1.0

Source code of IEEE Zeus 1.0 website, Zeus is the signature event of IEEE RIT SB.
CSS
1
star
37

enquesta

Website of Enquesta 16, National level quiz competition held at Rajiv gandhi institute of technology Kottayam.
CSS
1
star
38

mozillakerala

Mozilla Kerala App
JavaScript
1
star
39

openshift-quickstart

One click quickstart to make your website online in Redhat's openshift cloud without typing a single command
PHP
1
star