LoginSignup
9

More than 5 years have passed since last update.

vim→Python→Slackに投稿

Last updated at Posted at 2017-02-14

VIMからPython経由して、Slackに投稿

  • VIMからSlack使いたい人は以下を使ったほうがいいと思う。
     - SlackとVimとメモ管理と私

  • 以下の記事に影響されました。

  • やりたかったこと

    • Pure Pythonで、Slackに投稿
    • VIMからできれば、もっといい
  • 準備

    • SlackのTokenか、WebhookのURLは自分でGETする
    • Getしたら、Webhookと、API両方使えるから好きな方を設定
    • Pythonがコマンドプロンプトから実行できれば動くはず
    • vim scirptにpython.pyのPathを書く
  • 動作

    • Python実行で「test」を投稿
    • vimで「:PSlack」するとエディタの内容を投稿
    • 改行を連続投稿に変更しました
python.py
import sys
import requests
import json
import re


class SlackApiWrapper:
    def __init__(self, proxy_flg=None):
        '''
        proxy_flg:True:Proxy使う
                  False:Non-Proxy
        '''
        # Your infomation
        self.token = '<your token>'
        self.postWebhookUrl = '<your webhookurl>'

        # Post infomation
        self.postSlackUrl = 'https://slack.com/api/chat.postMessage'
        self.channel = '#general'
        self.username = 'vim_python'

        # if proxy
        if proxy_flg is None:
            self.proxy_flg = False
        else:
            self.proxy_flg = proxy_flg
            self.proxy_info = {
                "http": "http://hogehoge:8080",
                "https": "http://hogehoge:8080"
            }

    def post_api(self, text):
        json_data = {
            'token': self.token,
            'channel': self.channel,
            'text': text,
            'username': self.username,
            'unfurl_links': 'false',
            'pretty': 1

        }
        if self.proxy_flg:
            r = requests.post(self.postSlackUrl, params=json_data, proxies=self.proxy_info)
        else:
            r = requests.post(self.postSlackUrl, params=json_data)
        print(r.text)

    def post_webhook(self, text):
        json_data = {
            'text': text,
            'username': self.username,
            'link_names': 1
        }
        if self.proxy_flg:
            r = requests.post(self.postWebhookUrl, data=json.dumps(json_data), proxies=self.proxy_info)
        else:
            r = requests.post(self.postWebhookUrl, data=json.dumps(json_data))
        print(r.text)


def main(args):
    filename = None
    if args:
        filename = str(args[0])

    data = None
    if filename is None:
        data = ["test"]
    else:
        try:
            with open(filename, mode="r", encoding='utf-8') as fh:
                data = fh.readlines()
        except Exception as ex:
            raise ex

    # vimの改行を連結
    # data = "".join(data)
    # data = re.sub(r"\n", "", data)

    # None Proxy
    # sl = SlackApiWrapper(False)

    # Proxy
    sl = SlackApiWrapper(True)

    # 改行を連続投稿
    for text in data:
        # どちらでも
        sl.post_webhook(text)
        sl.post_api(text)


if __name__ == "__main__":
    main(sys.argv[1:])
_vimrc.local
"slack"{{{
function! s:post_slack_vim()"
    let s:file = tempname()
    let s:py_script = "<DLしたPython.pyのPATH>"
    silent execute ":write " . s:file
    silent execute '!python' . ' ' . s:py_script . ' ' . s:file
    call delete(s:file)
    unlet! s:file
    unlet! s:py_script
endfunction augroup END"
command! -nargs=0 PSlack call s:post_slack_vim()
"}}}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9