Initial commit
This commit is contained in:
85
wallabag_mass_import.py
Normal file
85
wallabag_mass_import.py
Normal file
@@ -0,0 +1,85 @@
|
||||
import asyncio
|
||||
import configparser
|
||||
import logging
|
||||
import json
|
||||
import os
|
||||
from typing import Any, Dict, List
|
||||
|
||||
import aiohttp
|
||||
from wallabag_api.wallabag import Wallabag
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
CONFIG_PATH = os.path.join(ROOT_DIR, "config.ini")
|
||||
ARTICLES_PATH = os.path.join(ROOT_DIR, "articles.json")
|
||||
|
||||
|
||||
def load_configuration(path):
|
||||
config = configparser.ConfigParser()
|
||||
config.read(path)
|
||||
return config["Wallabag Configuration"]
|
||||
|
||||
|
||||
async def connect_to_wallabag(
|
||||
configuration: Dict[str, str], session: aiohttp.ClientSession
|
||||
) -> Wallabag:
|
||||
configuration["access_token"] = await Wallabag.get_token(**configuration)
|
||||
|
||||
return Wallabag(
|
||||
host=configuration["host"],
|
||||
token=configuration["access_token"],
|
||||
client_id=configuration["client_id"],
|
||||
client_secret=configuration["client_secret"],
|
||||
aio_sess=session,
|
||||
)
|
||||
|
||||
|
||||
def read_urls_file(f):
|
||||
while True:
|
||||
line = f.readline()
|
||||
if line:
|
||||
yield line
|
||||
else:
|
||||
break
|
||||
|
||||
|
||||
async def import_articles(w_api: Wallabag, path: str, limit=0):
|
||||
entries_id = []
|
||||
with open(path) as f:
|
||||
for index, item in enumerate(json.load(f)):
|
||||
if limit > 0 and index == limit:
|
||||
break
|
||||
|
||||
entry = await w_api.post_entries(
|
||||
url=item["url"],
|
||||
archive=item["is_archived"],
|
||||
starred=item["is_starred"],
|
||||
original_url=item["origin_url"],
|
||||
tags=",".join(item["tags"]),
|
||||
)
|
||||
logging.info(
|
||||
f"Entry url {item['url']} posted to wallabag with id {entry['id']}"
|
||||
)
|
||||
entries_id.append(entry["id"])
|
||||
|
||||
return entries_id
|
||||
|
||||
|
||||
async def delete_all_entries(ids: List[int], w_api: Wallabag):
|
||||
for id in ids:
|
||||
entry = await w_api.delete_entries(id)
|
||||
logging.info(f"Deleted wallabag entry with id {entry['id']}")
|
||||
|
||||
|
||||
async def main():
|
||||
async with aiohttp.ClientSession(loop=asyncio.get_event_loop()) as session:
|
||||
configuration = dict(load_configuration(CONFIG_PATH))
|
||||
w_api = await connect_to_wallabag(configuration, session)
|
||||
|
||||
entries_id = await import_articles(w_api, "articles.json", limit=1)
|
||||
await delete_all_entries(entries_id, w_api)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user