PipedreamでPythonistaに優しい(?)ワークフロー構築R
- author:
Kazuya Takei / @attakei
- date:
2022/10/15
- event:
PyCon JP 2022 LT in Official Party
- hashtags:
はじめに
LTの趣旨
Pipedreamを使ってみた/皆さん使ってみて。
お前誰よ
Kazuya Takei / @attakei
趣味系Pythonista
Sphinxでプレゼンテーションをしたがる人
Sphinxを通して考える、「拡張」の仕方
見てくれた方、ありがとうございました。
Pipedreamの話をします
Pipedream is 何
Pipedream is 何
ワークフローSaaS
ワークフローって
外部リソースなどをトリガーとして定義
トリガーに応じて順次アクションを実行
Pipedream is 何
Pipedreamのライバル
IFTTT
Zapier
Power Automate
(他にもいろいろ)
ライバルとの違い?
アクションを自作出来る。( deepl_〜
は自作)
ライバルとの違い?
アクションを自作出来る。(実際の動き)
カスタムコードの対応言語
Node.js
Golang
Bash
Python
Pythonistaに優しい!
使用例
GitHubのアクティビティを集計するワークフローの一部
使用例
コード
from datetime import date
from python_graphql_client import GraphqlClient
def get_client(token: str) -> GraphqlClient:
headers = {
"Authorization": f"Bearer {token}"
}
return GraphqlClient(endpoint="https://api.github.com/graphql", headers=headers)
def handler(pd: "pipedream"):
token = f"{pd.inputs['github']['$auth']['oauth_access_token']}"
client = get_client(token)
query = """
query($username: String!, $date: DateTime) {
user(login: $username) {
contributionsCollection(from: $date, to: $date) {
contributionCalendar {
totalContributions
weeks {
contributionDays {
contributionCount
weekday
date
}
}
}
}
}
}
"""
variables = {
"username": "attakei",
"date": date.today().strftime("%Y-%m-%dT00:00:00"),
}
result = client.execute(query=query, variables=variables)
print(result["data"])
return {
"date": date.today().strftime("%Y-%m-%d"),
"contributions": result["data"]["user"]["contributionsCollection"]["contributionCalendar"]["weeks"][0]["contributionDays"][0]["contributionCount"]
}
「GraphQLを使ってGitiHub APIからアクティビティを入手する」 Pythonコード を動かせる。
使用例
Q
ライブラリは?
requirements.txt
みたいなものは無いの?A
標準ライブラリにないものをインポートしようとしたら、ライブラリ名とみなしてPyPIから取ってくるみたいです。(雑な理解で)
課題感
たまに意味不明な失敗する。
正しいコードでも、微妙な頻度で失敗する。
アクションの実行環境周りに何かありそう。
課題感
他には、
「RSSの管理をしくじって、RSS全部取り直し?」からの
「RSSの全エントリーをトリガーにしてしまう」という大事件。
=> FBすれば改善されるかも?
END
ワークフローSaaSもPythonで!
無料プランあるし、無料プランでもカスタムコードは動かせます