-
Notifications
You must be signed in to change notification settings - Fork 0
/
latest_posts.py
48 lines (42 loc) · 1.6 KB
/
latest_posts.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Source: https://github.com/eugeneyan/eugeneyan/
import feedparser
import pathlib
import re
root = pathlib.Path(__file__).parent.resolve()
# Find the search trigger in readme
# This is done by searching for comment blocks for "Blogpost"
# e.g. "Blogpost starts" "Blogpost ends" in readme
def replace_writing(content, marker, chunk, inline=False):
r = re.compile(
r'<!\-\- {} starts \-\->.*<!\-\- {} ends \-\->'.format(marker, marker),
re.DOTALL,
)
if not inline:
chunk = '\n{}\n'.format(chunk)
chunk = '<!-- {} starts -->{}<!-- {} ends -->'.format(marker, chunk, marker)
return r.sub(chunk, content)
# Fetch the lastest 5 posts by feedparser
def fetch_writing():
entries = feedparser.parse('https://estebantorr.es/index.xml')['items']
top5_entries = entries[:5]
entry_count = len(entries)
return [
{
'title': entry['title'],
'url': entry['link'].split('#')[0],
'published': re.findall(r'(.*?)\+0000', entry['published'])[0]
}
for entry in top5_entries
], entry_count
# Execution the code
if __name__ == '__main__':
readme_path = root / 'README.md'
readme = readme_path.open().read()
entries, entry_count = fetch_writing()
print(f'Recent 5: {entries}, Total count: {entry_count}')
entries_md = '\n'.join(
['* [{title}]({url}) - {published}'.format(**entry) for entry in entries]
)
# Update entries
rewritten_entries = replace_writing(readme, 'Blogpost', entries_md)
readme_path.open('w').write(rewritten_entries)