It is a code that exports the articles posted on Qiita to one file per article and pushes it to Github. I had the wisdom of my ancestors, so I used it as a reference. For reference, I wrote a Python script that exports all my posts using Qiita API v2 was the execution environment Python 2.7. So I modified the code a bit so that it works with 3.7.7 I'm using.
OS:macOS Python:3.7.7
# -*- coding: utf-8 -*-
import json
import os
import sys
import requests
import subprocess
def abort(msg):
print('Error!: {0}'.format(msg))
sys.exit(1)
def get(url, params, headers):
r = requests.get(url, params=params, proxies=proxies, headers=headers)
return r
def post(url, data_dict, headers_dict):
r = requests.post(url, data=json.dumps(data_dict),
proxies=proxies, headers=headers_dict)
return r
def print_response(r, title=''):
c = r.status_code
h = r.headers
print('{0} Response={1}, Detail={2}'.format(title, c, h))
def assert_response(r, title=''):
c = r.status_code
h = r.headers
if c<200 or c>299:
abort('{0} Response={1}, Detail={2}'.format(title, c, h))
class Article:
def __init__(self, d):
self._title = d['title']
self._html_body = d['rendered_body']
self._md_body = d['body']
self._tags = d['tags']
self._created_at = d['created_at']
self._updated_at = d['updated_at']
self._url = d['url']
user = d['user']
self._userid = user['id']
self._username = user['name']
def save_as_markdown(self):
title = self._title
body = self._md_body.encode('utf8')
filename = '{0}.md'.format(title)
fullpath = os.path.join(MYDIR, filename)
#Change to binary mode
#Reference) https://go-journey.club/archives/7113
with open(fullpath, 'wb') as f:
f.write(body)
#Specify the file output destination. Please specify the directory you want to output.
MYDIR = os.path.abspath("/Users/shin/github/Qiita")
proxies = {
"http": os.getenv('HTTP_PROXY'),
"https": os.getenv('HTTPS_PROXY'),
}
#Get Qiita access token
token = os.getenv('QIITA_ACCESS_TOKEN')
#If not specified in the environment variable, set as follows
# token = 'Access token'
headers = {
'content-type' : 'application/json',
'charset' : 'utf-8',
'Authorization' : 'Bearer {0}'.format(token)
}
#List of posts by authenticated users
url = 'https://qiita.com/api/v2/authenticated_user/items'
params = {
'page' : 1,
'per_page' : 100,
}
r = get(url, params, headers)
assert_response(r)
# print_response(r)
items = r.json()
print('{0} entries.'.format(len(items)))
for i,item in enumerate(items):
print('[{0}/{1}] saving...'.format(i+1, len(items)))
article = Article(item)
article.save_as_markdown()
#Push to Github
#Reference) https://www.atmarkit.co.jp/ait/articles/2003/13/news031.html
subprocess.run(["cd", "/Users/shin/github/Qiita"])
#Add update contents to index (add to staging area) → Commit target
subprocess.run(["git", "add", "-A"])
#Commit to local repository
subprocess.run(["git", "commit", "-a", "-m", "AutomaticUpdate"])
#Reflect the contents of the local repository in the remote repository
subprocess.run(["git", "push", "origin", "master"])
Recommended Posts