76 lines
1.9 KiB
Python
76 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
#-*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Get a fortune from a JSON file.
|
|
|
|
File is under EUPL1.2
|
|
Author: kujiu
|
|
"""
|
|
import os
|
|
import json
|
|
import random
|
|
from locale import gettext as _
|
|
from variety.plugins.IQuoteSource import IQuoteSource
|
|
|
|
SRCFILE = "~/.fortunes.json"
|
|
|
|
class JsonFortuneSource(IQuoteSource):
|
|
""" Get quote from JSON fortune file """
|
|
quotes = {}
|
|
|
|
@classmethod
|
|
def get_info(cls):
|
|
return {
|
|
"name": "JSON Fortunes",
|
|
"description": _("Displays quotes using a JSON file"),
|
|
"author": "kujiu",
|
|
"version": "0.1"
|
|
}
|
|
|
|
def supports_search(self):
|
|
return False
|
|
|
|
def load_srcfile(self):
|
|
"""
|
|
Load quote from file
|
|
"""
|
|
if self.quotes:
|
|
return
|
|
|
|
srcfile = os.path.expanduser(
|
|
os.path.expandvars(SRCFILE)
|
|
)
|
|
|
|
with open(srcfile) as fin:
|
|
self.quotes = json.load(fin)
|
|
|
|
def get_random(self):
|
|
self.load_srcfile()
|
|
|
|
quote = ""
|
|
count = 0
|
|
while not quote and count < 50:
|
|
count += 1
|
|
lang = random.choice([lang for lang in self.quotes.keys()])
|
|
category = random.choice([cat for cat in self.quotes[lang].keys()])
|
|
if not self.quotes[lang][category]:
|
|
continue
|
|
author = random.choice(
|
|
[author for author in self.quotes[lang][category].keys()])
|
|
if not self.quotes[lang][category][author]:
|
|
continue
|
|
quote = random.choice(self.quotes[lang][category][author])
|
|
|
|
return [{
|
|
"quote": quote,
|
|
"author": author,
|
|
"sourceName": "WikiQuote",
|
|
"link": "https://%s.wikiquote.org/wiki/%s" % (lang, author)
|
|
}]
|
|
|
|
def get_for_author(self, author):
|
|
return []
|
|
|
|
def get_for_keyword(self, keyword):
|
|
return []
|