포터블기기 강좌


컴퓨터를 켤때마다 매일 인용문이 나오면 좋겠다는 생각을 해봤습니다.

cowsay같은거도 있지만 실없는 소리보다는 뭔가 의미있는 내용이 나오는걸 찾아봤네요

그러다보니 theysaidso.com 에서 매일 서비스하는 인용글 서비스가 있네요

이걸 i3스테이터스 바에 띄우는걸 만들어 봤습니다.


그런데 이 i3스테이터스바를 그려주는 것은 시계등 자주 업데이트해야하는데 그때마다 저 REST서비스를 이용하면 안되겠죠

그래서 간단한 캐싱기법을 생각해봤습니다.

.cache/quotes로 한시간정도 최근의 인용문이 유지되도록 했습니다.

물론 bash상에서도 간단히 될거같은데 다른 파이선스크립트상에서 쓰려고 파이선모듈로 만들었습니다.




다음을 ~/bin에 넣고 conky에서 json으로 표시하면 됩니다.

만일 터미널실행시 표시하고 싶다면  .bashrc 에 quotes라고 추가하세요



먼저 캐시 모듈

cache.py

-------8<-------------------8<-------------------8<-------------------8<-------------------8<------------


#!/usr/bin/env python
import os,sys
import time as tm, datetime as dt


class Cache:
    def __init__(self, interval ):
        """ Use sys.argv joined by delimeter_ as key """
        a = []
        a.append(sys.argv[0].split("/")[-1])
        a += sys.argv[1:]
        self.key = "_".join(a)
        self.interval = interval
        self.file_name = os.environ['HOME']+"/.cache/"+self.key

    def read(self):
        value = None  # Assume cache is exprired by default
        timestamp = -1
        try:
            f = open(self.file_name, 'r')
            content = f.readlines()
            line = content[-1].rsplit(' ',1)
            value,timestamp = str(line[0]), float(line[1])
                 
        except IOError:
            pass
        if timestamp + self.interval < tm.time():  # means expired
            value = None
        return value

    def write(self,  value):
        f = open(self.file_name, 'w+')
        f.write(str(value) + " " + str(tm.time()))
        f.close()

    def clear():
        os.remove(self.file_name)







quotes  실행화일

(chmod +x quotes 로 실행권한주고 ~/bin에 넣습니다)

-------8<-------------------8<-------------------8<-------------------8<-------------------8<------------


#!/usr/bin/env python
import urllib, json
from cache import Cache

def get_quotes():
    """ Read cached data if exists """
    q_cache = Cache(3600)
    value = q_cache.read()

    if value == None:
        url="http://quotes.rest/qod.json?category=inspire"
        response = urllib.urlopen(url)
        data = json.loads(response.read())
        try:
            value = data["contents"]["quotes"][0]["quote"] + " - " +\
                data["contents"]["quotes"][0]["author"]
            q_cache.write(value)
        except KeyError:
            print "key error"
            print data
            pass   # return old value
    return value

msg = get_quotes()
print msg




screenshot
번호 제목 작성자 작성일 조회
201 PostmarketOS: `진짜`리눅스 스마트폰을 구하는 법. [2] piloteer 02.07 42662
200 리눅스민트: 화면분할해서 윈도우배치하기 영진 02.05 40707
199 안드로이드 -> 아이폰 이전시 주의할 점 [1] matsal 11.22 41696
198 리눅스: 구글tts를 이용하기 [1] 영진 10.01 41074
197 리눅스민트 : 구글드라이브 연동하기 2 영진 09.23 40780
196 리눅스: 쉽고 빠른 백업은 없을까? [3] 영진 09.16 9137
195 xfce4에서 generic monitor활용 (막대그래프) file 영진 02.12 9016
194 리눅스: xfce4데스크탑에서 원하는 정보만 표시하기 [1] file 영진 02.05 8931
193 해피해킹키보드 흉내내기 (리눅스) [1] 영진 12.03 9236
192 리눅스민트: 네모액션으로 구글드라이브 연동 [2] file 영진 04.11 9353
191 구글킵 이용하기 [5] file 영진 04.06 9662
190 리눅스: 어학공부를 위한 mp3 플레이어 [2] 영진 01.18 9319
189 리눅스민트: 구글캘린더 연결하기 [1] file 영진 12.19 9589
188 리눅스 : 음성타이머를 만들어보자 [2] 영진 12.08 9228
187 리눅스데스크탑: 구글드라이브로 백업하기 [1] 영진 11.21 8943
» 리눅스데스크탑: 오늘의 인용문 표시하기 영진 10.19 8911
185 리눅스 데스트탑 : i3wm [2] 영진 10.17 9056
184 시내먼 데스크탑: 비트코인 티커 만들기 (초간단) [1] 영진 10.01 8880
183 윈도에서 간단하게 배터리 수명 알아보기 [3] matsal 05.10 9490
182 USB Type-C 케이블과 USB 3.2 그래픽 출력단자 [2] matsal 01.01 12911

오늘:
1,726
어제:
1,986
전체:
15,970,423