tweepy で呟くとか

tweepy で呟けたので残します。

なお、コードは CC0 (Public Domain) で。

ディレクトリ構成

.
├── setup.py
└── src
    └── echo_twitter
        ├── compat.py
        ├── __init__.py
        ├── my_twit.py
        └── twit.py

setup.py

from setuptools import setup, find_packages

params = {
    'name': 'echo_twitter',
    'version': '0.0.1',
    'package_dir': {'': 'src'},
    'packages': find_packages(
        exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),
    'author': 'example.com',
    'license': 'Public Domain',
}

params['install_requires'] = [
    'tweepy',
    'docopt',
]

params['entry_points'] = {
    'console_scripts': [
        'my_twit = echo_twitter.my_twit:main',
    ],
}

.py

__init__.py は空

twit.py

# -*- coding: utf-8 -*-
import os


def get_settings_io(home_path=None):
    '''
    ~/.my_twitrc ファイルを読み込み、
    ConfigParser で読み込める StringIO オブジェクトを返す
    '''
    from .compat import StringIO
    home_path = home_path or os.environ['HOME']
    file_path = os.path.join(home_path, '.my_twitrc')
    with open(file_path, 'r') as fp:
        lines = [u'{}'.format(x.strip()) for x in fp]
    lines = u'\n'.join([u'[settings]'] + lines)
    return StringIO(lines)


def get_settings(keys, home_path=None):
    '''
    keys で渡されたリストのキーの値を返す
    '''
    from ConfigParser import SafeConfigParser
    settings = SafeConfigParser()
    settings.readfp(get_settings_io(home_path))
    values = [settings.get('settings', x) for x in keys]
    return tuple(values)


def get_api():
    '''
    tweepy の API を返す
    '''
    from tweepy import OAuthHandler, API
    auth = OAuthHandler(*get_settings(['consumer_key', 'consumer_secret']))
    auth.set_access_token(*get_settings(['access_token', 'access_token_secret']))
    return API(auth)


def update_status(message, verbose):
    '''
    呟く
    '''
    get_api().update_status(message)

my_twit.py

# -*- coding: utf-8 -*-
"""
Usage: my_twit [-hv] [COMMENT] ...

つぶやける

Arguments:
    COMMENTS    つぶやく内容

Options:
    -h --help
    -v          verbose mode
"""


def main():
    from docopt import docopt
    from .twit import update_status
    args = docopt(__doc__)
    comment = ' '.join(args['COMMENT'])
    verbose = args['-v']
    update_status(comment, verbose)

compat.py

try:
    from io import StringIO
except ImportError:
    try:
        from cStringIO import StringIO
    except ImportError:
        from StringIO import StringIO

使い方

1. 頑張ってコードうつす。
2. python setup install
3. ホームディレクトリに .my_twitrc ファイルを作成し、consumer_key consumer_secret access_token access_token_secret を記載する。
4. my_twit なにか