{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# connpass_client の使い方\n",
    "\n",
    "[環境構築](docs/environment.md) を参考にconnpass_clientをインストールしてください。\n",
    "\n",
    "\n",
    "## イベントを取得する\n",
    "\n",
    "クライアントオブジェクトの `.get()` メソッドにオプションを渡せば、イベント情報を得られます。オプションについては[APIリファレンス - connpass](https://connpass.com/about/api/)を参照してください。\n",
    "\n",
    "### 例1: `event_id = \"266898\"` の情報を得る"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[{'accepted': 15,\n",
      "  'address': '',\n",
      "  'catch': 'CHAPTER 2 テスト関数を書く',\n",
      "  'description': '<h1>概要</h1>\\n'\n",
      "                 '<ul>\\n'\n",
      "                 '<li><a '\n",
      "                 'href=\"https://www.shoeisha.co.jp/book/detail/9784798177458\" '\n",
      "                 'rel=\"nofollow\">テスト駆動Python 第2版</a> を読むイベントです</li>\\n'\n",
      "                 '<li>今回は「CHAPTER 2 '\n",
      "                 'テスト関数を書く」を読んだり、サンプルコードを実行したりした内容を共有します</li>\\n'\n",
      "                 '<li>「CHAPTER 1 はじめてのpytest」の内容は把握している前提で進めます</li>\\n'\n",
      "                 '</ul>\\n'\n",
      "                 '<p>今回はスペシャルゲストとして、監修の <a href=\"https://twitter.com/yattom\" '\n",
      "                 'rel=\"nofollow\">安井 力</a> '\n",
      "                 'さんにご参加いただけることになりました。冒頭に書籍の紹介をしていただきます。</p>\\n'\n",
      "                 '<h2>事前準備</h2>\\n'\n",
      "                 '<ul>\\n'\n",
      "                 '<li>「CHAPTER 1 はじめてのpytest」を確認してサンプルコードが実行できるようにしてください</li>\\n'\n",
      "                 '<li>可能であれば「CHAPTER 2 テスト関数を書く」の内容を確認し、練習問題を実施しておいてください</li>\\n'\n",
      "                 '</ul>\\n'\n",
      "                 '<h1>参加方法</h1>\\n'\n",
      "                 '<p><strong>オンラインで開催します</strong></p>\\n'\n",
      "                 '<ul>\\n'\n",
      "                 '<li><a href=\"https://brave.com/ja/talk/\" '\n",
      "                 'rel=\"nofollow\">Brave Talk</a>を使います、ブラウザから参加できます</li>\\n'\n",
      "                 '<li><strong>参加方法は「参加者への情報」を参照してください</strong></li>\\n'\n",
      "                 '<li><strong>マイクが使えるようにしてください</strong> (カメラは不要です)</li>\\n'\n",
      "                 '</ul>\\n'\n",
      "                 '<h2>タイムテーブル</h2>\\n'\n",
      "                 '<ol>\\n'\n",
      "                 '<li>書籍の紹介 <a href=\"https://twitter.com/yattom\" '\n",
      "                 'rel=\"nofollow\">@yattom</a></li>\\n'\n",
      "                 '<li>自己紹介</li>\\n'\n",
      "                 '<li>「CHAPTER 2 '\n",
      "                 'テスト関数を書く」のメモ（自分なりに読んだポイントやきいてみたいこと）をまとめる</li>\\n'\n",
      "                 '<li>2の内容を情報共有</li>\\n'\n",
      "                 '</ol>',\n",
      "  'ended_at': '2022-11-30T20:30:00+09:00',\n",
      "  'event_id': 266898,\n",
      "  'event_type': 'participation',\n",
      "  'event_url': 'https://fin-py.connpass.com/event/266898/',\n",
      "  'hash_tag': '',\n",
      "  'lat': None,\n",
      "  'limit': None,\n",
      "  'lon': None,\n",
      "  'owner_display_name': 'driller',\n",
      "  'owner_id': 36417,\n",
      "  'owner_nickname': 'driller',\n",
      "  'place': 'オンライン(Brave Talk)',\n",
      "  'series': {'id': 3056,\n",
      "             'title': 'fin-py',\n",
      "             'url': 'https://fin-py.connpass.com/'},\n",
      "  'started_at': '2022-11-30T19:30:00+09:00',\n",
      "  'title': 'テスト駆動Python 第2版 読書会#1',\n",
      "  'updated_at': '2022-11-30T16:30:02+09:00',\n",
      "  'waiting': 0}]\n"
     ]
    }
   ],
   "source": [
    "from connpass_client import ConnpassClient\n",
    "from pprint import pprint\n",
    "\n",
    "cli = ConnpassClient()\n",
    "data = cli.get(event_id=\"266898\")\n",
    "pprint(data[\"events\"])"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "結果数は `'results_available'` で得られ、その詳細データを `'events'` で得られます。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例2: `owner_nickname=\"driller\", keyword_or=\"もくもく\"` の情報を得る"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'accepted': 8,\n",
      " 'address': '',\n",
      " 'catch': 'finの人もpyの人も、ガチ勢もゆる勢も',\n",
      " 'description': '<h1>概要</h1>\\n'\n",
      "                '<p>Pythonまたは金融に関するやりたいことを各自持ち寄って作業をする会です。<br>\\n'\n",
      "                '開発、データ分析、学習、読書等、作業内容はなんでも構いません。<br>\\n'\n",
      "                '最後に作業の成果をLTにて発表します。<br>\\n'\n",
      "                '参加費は無料です。<br>\\n'\n",
      "                '入退室は自由です、ご都合のよい時間帯に参加ください。  </p>\\n'\n",
      "                '<h1>参加対象</h1>\\n'\n",
      "                '<p>下記の何れかに該当するかた。金融のジャンルは問いません。</p>\\n'\n",
      "                '<ul>\\n'\n",
      "                '<li>金融に興味があるかた</li>\\n'\n",
      "                '<li>Pythonに興味があるかた</li>\\n'\n",
      "                '</ul>\\n'\n",
      "                '<h1>開催概要</h1>\\n'\n",
      "                '<p><strong>オンラインで開催します</strong></p>\\n'\n",
      "                '<ul>\\n'\n",
      "                '<li><a href=\"https://brave.com/ja/talk/\" rel=\"nofollow\">Brave '\n",
      "                'Talk</a>を使います</li>\\n'\n",
      "                '<li><strong>参加方法は「参加者への情報」を参照してください</strong></li>\\n'\n",
      "                '<li><strong>マイクが使えるようにしてください</strong> (カメラは不要です)</li>\\n'\n",
      "                '<li>作業ではなく単に話したいだけでもOKです</li>\\n'\n",
      "                '<li>成果発表時に映す資料があれば、画面を共有してください</li>\\n'\n",
      "                '</ul>\\n'\n",
      "                '<h2>注意事項</h2>\\n'\n",
      "                '<ul>\\n'\n",
      "                '<li>途中から参加するかたは必ず<strong>音声</strong>であいさつしてください</li>\\n'\n",
      "                '<li>こちから呼びかけても応答がないかたは退出していただく場合があります</li>\\n'\n",
      "                '</ul>\\n'\n",
      "                '<h1>タイムテーブル</h1>\\n'\n",
      "                '<p>参加人数に応じて成果発表の時間は前後します。  </p>\\n'\n",
      "                '<table>\\n'\n",
      "                '<thead>\\n'\n",
      "                '<tr>\\n'\n",
      "                '<th>時刻</th>\\n'\n",
      "                '<th>内容</th>\\n'\n",
      "                '</tr>\\n'\n",
      "                '</thead>\\n'\n",
      "                '<tbody>\\n'\n",
      "                '<tr>\\n'\n",
      "                '<td>10:00</td>\\n'\n",
      "                '<td>接続開始、自己紹介の記入</td>\\n'\n",
      "                '</tr>\\n'\n",
      "                '<tr>\\n'\n",
      "                '<td>10:10</td>\\n'\n",
      "                '<td>fin-pyについての説明、自己紹介</td>\\n'\n",
      "                '</tr>\\n'\n",
      "                '<tr>\\n'\n",
      "                '<td>12:00</td>\\n'\n",
      "                '<td>成果発表</td>\\n'\n",
      "                '</tr>\\n'\n",
      "                '<tr>\\n'\n",
      "                '<td>12:30</td>\\n'\n",
      "                '<td>反省会（有志）</td>\\n'\n",
      "                '</tr>\\n'\n",
      "                '</tbody>\\n'\n",
      "                '</table>\\n'\n",
      "                '<h1>fin-pyについて</h1>\\n'\n",
      "                '<p><a href=\"https://github.com/fin-py/guideline\" '\n",
      "                'rel=\"nofollow\">ガイドライン</a>を参照ください。</p>',\n",
      " 'ended_at': '2023-02-04T13:00:00+09:00',\n",
      " 'event_id': 271515,\n",
      " 'event_type': 'participation',\n",
      " 'event_url': 'https://fin-py.connpass.com/event/271515/',\n",
      " 'hash_tag': 'finpy',\n",
      " 'lat': None,\n",
      " 'limit': 20,\n",
      " 'lon': None,\n",
      " 'owner_display_name': 'driller',\n",
      " 'owner_id': 36417,\n",
      " 'owner_nickname': 'driller',\n",
      " 'place': 'オンライン(Brave Talk)',\n",
      " 'series': {'id': 3056,\n",
      "            'title': 'fin-py',\n",
      "            'url': 'https://fin-py.connpass.com/'},\n",
      " 'started_at': '2023-02-04T10:00:00+09:00',\n",
      " 'title': '【オンライン開催】fin-pyもくもく会 #65',\n",
      " 'updated_at': '2023-01-07T21:52:02+09:00',\n",
      " 'waiting': 0}\n"
     ]
    }
   ],
   "source": [
    "from connpass_client import ConnpassClient\n",
    "from pprint import pprint\n",
    "\n",
    "cli = ConnpassClient()\n",
    "data = cli.get(owner_nickname=\"driller\", keyword_or=\"もくもく\")\n",
    "pprint(data[\"events\"][0])  # 最初のデータ"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例3: ファイルに書き込む\n",
    "\n",
    "`io.to_json()` メソッドでJSONファイルに、 `io.to_csv()` CSVファイルに書き込めます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "from connpass_client import io\n",
    "from pprint import pprint\n",
    "\n",
    "cli = ConnpassClient()\n",
    "data = cli.get(event_id=\"266898\")\n",
    "io.Writer(data).to_json(\"266898.json\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\"results_start\": 1, \"results_returned\": 1, \"results_available\": 1, \"events\": [{\"event_id\": 266898, \"title\": \"\\u30c6\\u30b9\\u30c8\\u99c6\\u52d5Python \\u7b2c2\\u7248 \\u8aad\\u66f8\\u4f1a#1\", \"catch\": \"CHAPTER 2 \\u30c6\\u30b9\\u30c8\\u95a2\\u6570\\u3092\\u66f8\\u304f\", \"description\": \"<h1>\\u6982\\u8981</h1>\\n<ul>\\n<li><a href=\\\"https://www.shoeisha.co.jp/book/detail/9784798177458\\\" rel=\\\"nofollow\\\">\\u30c6\\u30b9\\u30c8\\u99c6\\u52d5Python \\u7b2c2\\u7248</a> \\u3092\\u8aad\\u3080\\u30a4\\u30d9\\u30f3\\u30c8\\u3067\\u3059</li>\\n<li>\\u4eca\\u56de\\u306f\\u300cCHAPTER 2 \\u30c6\\u30b9\\u30c8\\u95a2\\u6570\\u3092\\u66f8\\u304f\\u300d\\u3092\\u8aad\\u3093\\u3060\\u308a\\u3001\\u30b5\\u30f3\\u30d7\\u30eb\\u30b3\\u30fc\\u30c9\\u3092\\u5b9f\\u884c\\u3057\\u305f\\u308a\\u3057\\u305f\\u5185\\u5bb9\\u3092\\u5171\\u6709\\u3057\\u307e\\u3059</li>\\n<li>\\u300cCHAPTER 1 \\u306f\\u3058\\u3081\\u3066\\u306epytest\\u300d\\u306e\\u5185\\u5bb9\\u306f\\u628a\\u63e1\\u3057\\u3066\\u3044\\u308b\\u524d\\u63d0\\u3067\\u9032\\u3081\\u307e\\u3059</li>\\n</ul>\\n<p>\\u4eca\\u56de\\u306f\\u30b9\\u30da\\u30b7\\u30e3\\u30eb\\u30b2\\u30b9\\u30c8\\u3068\\u3057\\u3066\\u3001\\u76e3\\u4fee\\u306e <a href=\\\"https://twitter.com/yattom\\\" rel=\\\"nofollow\\\">\\u5b89\\u4e95 \\u529b</a> \\u3055\\u3093\\u306b\\u3054\\u53c2\\u52a0\\u3044\\u305f\\u3060\\u3051\\u308b\\u3053\\u3068\\u306b\\u306a\\u308a\\u307e\\u3057\\u305f\\u3002\\u5192\\u982d\\u306b\\u66f8\\u7c4d\\u306e\\u7d39\\u4ecb\\u3092\\u3057\\u3066\\u3044\\u305f\\u3060\\u304d\\u307e\\u3059\\u3002</p>\\n<h2>\\u4e8b\\u524d\\u6e96\\u5099</h2>\\n<ul>\\n<li>\\u300cCHAPTER 1 \\u306f\\u3058\\u3081\\u3066\\u306epytest\\u300d\\u3092\\u78ba\\u8a8d\\u3057\\u3066\\u30b5\\u30f3\\u30d7\\u30eb\\u30b3\\u30fc\\u30c9\\u304c\\u5b9f\\u884c\\u3067\\u304d\\u308b\\u3088\\u3046\\u306b\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044</li>\\n<li>\\u53ef\\u80fd\\u3067\\u3042\\u308c\\u3070\\u300cCHAPTER 2 \\u30c6\\u30b9\\u30c8\\u95a2\\u6570\\u3092\\u66f8\\u304f\\u300d\\u306e\\u5185\\u5bb9\\u3092\\u78ba\\u8a8d\\u3057\\u3001\\u7df4\\u7fd2\\u554f\\u984c\\u3092\\u5b9f\\u65bd\\u3057\\u3066\\u304a\\u3044\\u3066\\u304f\\u3060\\u3055\\u3044</li>\\n</ul>\\n<h1>\\u53c2\\u52a0\\u65b9\\u6cd5</h1>\\n<p><strong>\\u30aa\\u30f3\\u30e9\\u30a4\\u30f3\\u3067\\u958b\\u50ac\\u3057\\u307e\\u3059</strong></p>\\n<ul>\\n<li><a href=\\\"https://brave.com/ja/talk/\\\" rel=\\\"nofollow\\\">Brave Talk</a>\\u3092\\u4f7f\\u3044\\u307e\\u3059\\u3001\\u30d6\\u30e9\\u30a6\\u30b6\\u304b\\u3089\\u53c2\\u52a0\\u3067\\u304d\\u307e\\u3059</li>\\n<li><strong>\\u53c2\\u52a0\\u65b9\\u6cd5\\u306f\\u300c\\u53c2\\u52a0\\u8005\\u3078\\u306e\\u60c5\\u5831\\u300d\\u3092\\u53c2\\u7167\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044</strong></li>\\n<li><strong>\\u30de\\u30a4\\u30af\\u304c\\u4f7f\\u3048\\u308b\\u3088\\u3046\\u306b\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044</strong> (\\u30ab\\u30e1\\u30e9\\u306f\\u4e0d\\u8981\\u3067\\u3059)</li>\\n</ul>\\n<h2>\\u30bf\\u30a4\\u30e0\\u30c6\\u30fc\\u30d6\\u30eb</h2>\\n<ol>\\n<li>\\u66f8\\u7c4d\\u306e\\u7d39\\u4ecb <a href=\\\"https://twitter.com/yattom\\\" rel=\\\"nofollow\\\">@yattom</a></li>\\n<li>\\u81ea\\u5df1\\u7d39\\u4ecb</li>\\n<li>\\u300cCHAPTER 2 \\u30c6\\u30b9\\u30c8\\u95a2\\u6570\\u3092\\u66f8\\u304f\\u300d\\u306e\\u30e1\\u30e2\\uff08\\u81ea\\u5206\\u306a\\u308a\\u306b\\u8aad\\u3093\\u3060\\u30dd\\u30a4\\u30f3\\u30c8\\u3084\\u304d\\u3044\\u3066\\u307f\\u305f\\u3044\\u3053\\u3068\\uff09\\u3092\\u307e\\u3068\\u3081\\u308b</li>\\n<li>2\\u306e\\u5185\\u5bb9\\u3092\\u60c5\\u5831\\u5171\\u6709</li>\\n</ol>\", \"event_url\": \"https://fin-py.connpass.com/event/266898/\", \"started_at\": \"2022-11-30T19:30:00+09:00\", \"ended_at\": \"2022-11-30T20:30:00+09:00\", \"limit\": null, \"hash_tag\": \"\", \"event_type\": \"participation\", \"accepted\": 15, \"waiting\": 0, \"updated_at\": \"2022-11-30T16:30:02+09:00\", \"owner_id\": 36417, \"owner_nickname\": \"driller\", \"owner_display_name\": \"driller\", \"place\": \"\\u30aa\\u30f3\\u30e9\\u30a4\\u30f3(Brave Talk)\", \"address\": \"\", \"lat\": null, \"lon\": null, \"series\": {\"id\": 3056, \"title\": \"fin-py\", \"url\": \"https://fin-py.connpass.com/\"}}]}"
     ]
    }
   ],
   "source": [
    "!cat 266898.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "io.Writer(data).to_csv(\"266898.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "event_id,title,catch,description,event_url,started_at,ended_at,limit,hash_tag,event_type,accepted,waiting,updated_at,owner_id,owner_nickname,owner_display_name,place,address,lat,lon,series\n",
      "266898,テスト駆動Python 第2版 読書会#1,CHAPTER 2 テスト関数を書く,\"<h1>概要</h1>\n",
      "<ul>\n",
      "<li><a href=\"\"https://www.shoeisha.co.jp/book/detail/9784798177458\"\" rel=\"\"nofollow\"\">テスト駆動Python 第2版</a> を読むイベントです</li>\n",
      "<li>今回は「CHAPTER 2 テスト関数を書く」を読んだり、サンプルコードを実行したりした内容を共有します</li>\n",
      "<li>「CHAPTER 1 はじめてのpytest」の内容は把握している前提で進めます</li>\n",
      "</ul>\n",
      "<p>今回はスペシャルゲストとして、監修の <a href=\"\"https://twitter.com/yattom\"\" rel=\"\"nofollow\"\">安井 力</a> さんにご参加いただけることになりました。冒頭に書籍の紹介をしていただきます。</p>\n",
      "<h2>事前準備</h2>\n",
      "<ul>\n",
      "<li>「CHAPTER 1 はじめてのpytest」を確認してサンプルコードが実行できるようにしてください</li>\n",
      "<li>可能であれば「CHAPTER 2 テスト関数を書く」の内容を確認し、練習問題を実施しておいてください</li>\n",
      "</ul>\n",
      "<h1>参加方法</h1>\n",
      "<p><strong>オンラインで開催します</strong></p>\n",
      "<ul>\n",
      "<li><a href=\"\"https://brave.com/ja/talk/\"\" rel=\"\"nofollow\"\">Brave Talk</a>を使います、ブラウザから参加できます</li>\n",
      "<li><strong>参加方法は「参加者への情報」を参照してください</strong></li>\n",
      "<li><strong>マイクが使えるようにしてください</strong> (カメラは不要です)</li>\n",
      "</ul>\n",
      "<h2>タイムテーブル</h2>\n",
      "<ol>\n",
      "<li>書籍の紹介 <a href=\"\"https://twitter.com/yattom\"\" rel=\"\"nofollow\"\">@yattom</a></li>\n",
      "<li>自己紹介</li>\n",
      "<li>「CHAPTER 2 テスト関数を書く」のメモ（自分なりに読んだポイントやきいてみたいこと）をまとめる</li>\n",
      "<li>2の内容を情報共有</li>\n",
      "</ol>\",https://fin-py.connpass.com/event/266898/,2022-11-30T19:30:00+09:00,2022-11-30T20:30:00+09:00,,,participation,15,0,2022-11-30T16:30:02+09:00,36417,driller,driller,オンライン(Brave Talk),,,,\"{'id': 3056, 'title': 'fin-py', 'url': 'https://fin-py.connpass.com/'}\"\n"
     ]
    }
   ],
   "source": [
    "!cat 266898.csv"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
