{"id":2990,"date":"2021-08-17T19:40:26","date_gmt":"2021-08-17T10:40:26","guid":{"rendered":"https:\/\/doc-sin.life\/?p=2990"},"modified":"2021-08-17T19:40:26","modified_gmt":"2021-08-17T10:40:26","slug":"%e3%83%97%e3%83%ac%e3%83%9f%e3%82%a2%e3%83%a0%e3%83%90%e3%83%b3%e3%83%80%e3%82%a4%e3%81%a7%e3%82%ac%e3%83%b3%e3%83%97%e3%83%a9%e3%81%ae%e6%96%b0%e5%95%86%e5%93%81%e3%81%8c%e5%87%ba%e3%81%9f%e3%82%89","status":"publish","type":"post","link":"https:\/\/doc-sin.life\/?p=2990","title":{"rendered":"\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u3067\u30ac\u30f3\u30d7\u30e9\u306e\u65b0\u5546\u54c1\u304c\u51fa\u305f\u3089\u901a\u77e5\u3059\u308b\u6a5f\u80fd\u3092\u8ffd\u52a0\u3057\u305f"},"content":{"rendered":"\n<p>\u3000\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3067\u7d39\u4ecb\u3055\u305b\u3066\u9802\u3044\u305f <a rel=\"noreferrer noopener\" href=\"https:\/\/twitter.com\/GunplaNotice\" target=\"_blank\">twitter bot <\/a>\u306b\u4e00\u3064\u901a\u77e5\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002\u305d\u308c\u306f\u300c<strong><span style=\"color: #ff0000\" class=\"text-color\">\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u306b\u65b0\u3057\u304f\u8ffd\u52a0\u3055\u308c\u305f\u30ac\u30f3\u30d7\u30e9<\/span><\/strong>\u300d\u306e\u901a\u77e5\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"ja\" dir=\"ltr\">\u301008\/16\u66f4\u65b0\u3011\u3010\u4e88\u7d04\u958b\u59cb\u524d\u3011\u30102022\u5e7402\u6708\u767a\u9001\u3011<br>\uff2d\uff27 1\/100 \u30a8\u30af\u30ea\u30d7\u30b9\u30ac\u30f3\u30c0\u30e0\u3010\uff12\uff10\uff12\uff12\u5e74\uff12\u6708\u767a\u9001\u3011\u304c\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u306b\u65b0\u3057\u304f\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002<a href=\"https:\/\/t.co\/i27qUnIykE\">https:\/\/t.co\/i27qUnIykE<\/a><\/p>&mdash; notice_gunpla (@GunplaNotice) <a href=\"https:\/\/twitter.com\/GunplaNotice\/status\/1427216664538456067?ref_src=twsrc%5Etfw\">August 16, 2021<\/a><\/blockquote><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<div class=\"blogcard\"><a href=\"https:\/\/doc-sin.life\/?p=2946\" data-blogcard=\"1\"><\/a><\/div>\n\n\n\n<p>\u5177\u4f53\u7684\u306b\u306f<a rel=\"noreferrer noopener\" href=\"https:\/\/p-bandai.jp\/chara\/c0010\/?q=%83K%83%93%83v%83%89&amp;page=0&amp;n=60&amp;C5=30\" target=\"_blank\">\u3053\u3061\u3089\u306e\u691c\u7d22\u300c\u4e88\u7d04\u30fb\u8ca9\u58f2\u671f\u9593\uff1a\u958b\u59cb\u524d\u300d\u3001\u300c\u30ad\u30fc\u30ef\u30fc\u30c9\uff1a\u30ac\u30f3\u30d7\u30e9\u300d<\/a>\u306b\u65b0\u3057\u304f\u51fa\u3066\u304d\u305f\u5546\u54c1\u304c\u3042\u3063\u305f\u3089\u305d\u308c\u3092\u901a\u77e5\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3000<a rel=\"noreferrer noopener\" href=\"https:\/\/twitter.com\/p_bandai\" target=\"_blank\">\u516c\u5f0f\u30c4\u30a4\u30c3\u30bf\u30fc<\/a>\u3067\u3082\u65b0\u5546\u54c1\u3092\u4e88\u7d04\u958b\u59cb\u524d\u306b\u30c4\u30a4\u30fc\u30c8\u3057\u3066\u304f\u308c\u307e\u3059\u304c\u3001\u7d50\u69cb\u30ae\u30ea\u30ae\u30ea\u3060\u3063\u305f\u308a\u30ac\u30f3\u30d7\u30e9\u4ee5\u5916\u306e\u7d39\u4ecb\u3082\u3042\u308b\u306e\u3067\u7d50\u69cb\u898b\u9003\u3057\u3066\u3057\u307e\u3046\u3053\u3068\u304c\u3042\u3063\u305f\u306e\u3067<strong><span style=\"color: #ff0000\" class=\"text-color\">\u30ac\u30f3\u30d7\u30e9\u306b\u7279\u5316\u3057\u305f\u901a\u77e5\u304c\u6b32\u3057\u304f\u3066<\/span><\/strong>\u6a5f\u80fd\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u3000\u79c1\u304c\u4e00\u756a\u6700\u8fd1\u306b\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u3067\u4e88\u7d04\u3057\u305f\u30ad\u30c3\u30c8\u304c\u4ee5\u4e0b\u306e\u30c4\u30a4\u30fc\u30c8\u306e\u3082\u306e\u3067\u3059\u304c\u3001\u4e88\u7d04\u958b\u59cb\u304c 13:00 \u3067\u3001\u305d\u306e\u30c4\u30a4\u30fc\u30c8\u3055\u308c\u305f\u6642\u9593\u304c 12:41 \u3067\u3059\u3002\u6d41\u77f3\u306b\u30ae\u30ea\u30ae\u30ea\u904e\u304e\u307e\u3059\u306d\u3002\u901a\u77e5ON\u306b\u3057\u3066\u305f\u3089\u4e88\u7d04\u958b\u59cb\u524d\u306b\u6c17\u3065\u304f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001<strong>\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u306e\u30c4\u30a4\u30fc\u30c8\u306f\u30ac\u30f3\u30d7\u30e9\u3060\u3051\u3058\u3083\u306a\u3044\u306e\u3067\u3001\u305d\u306e\u5168\u3066\u306e\u30c4\u30a4\u30fc\u30c8\u304c\u901a\u77e5\u3055\u308c\u308b\u306e\u3082\u9b31\u9676\u3057\u3044<\/strong>\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"ja\" dir=\"ltr\">\u3010\u672c\u65e513\u6642\u3054\u4e88\u7d04\u958b\u59cb\u3011<br>\u300e\u5287\u5834\u7248 \u6a5f\u52d5\u6226\u58eb\u30ac\u30f3\u30c0\u30e000 -A wakening of the Trailblazer-\u300f\u3088\u308a\u3001\u300cHG \u30ac\u30f3\u30c0\u30e0\u30b5\u30d0\u30fc\u30cb\u30e3\uff08\u6700\u7d42\u6c7a\u6226\u4ed5\u69d8\uff09\u300d\u304c\u767b\u5834\u2606<br><br>\u300cHG \u30ac\u30f3\u30c0\u30e0\u30cf\u30eb\u30fc\u30c8\uff08\u6700\u7d42\u6c7a\u6226\u4ed5\u69d8\uff09\u300d\u3082\u540c\u6642\u3054\u4e88\u7d04\u958b\u59cb\uff01<a href=\"https:\/\/twitter.com\/hashtag\/%E3%82%AC%E3%83%B3%E3%83%97%E3%83%A9?src=hash&amp;ref_src=twsrc%5Etfw\">#\u30ac\u30f3\u30d7\u30e9<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/g_00?src=hash&amp;ref_src=twsrc%5Etfw\">#g_00<\/a><a href=\"https:\/\/t.co\/qaWCRqX5jd\">https:\/\/t.co\/qaWCRqX5jd<\/a> <a href=\"https:\/\/t.co\/MGg4Topq4z\">pic.twitter.com\/MGg4Topq4z<\/a><\/p>&mdash; \u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4 \u3010\u516c\u5f0f\u3011 (@p_bandai) <a href=\"https:\/\/twitter.com\/p_bandai\/status\/1419502996426158082?ref_src=twsrc%5Etfw\">July 26, 2021<\/a><\/blockquote><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><figcaption>\u4e45\u3057\u3076\u308a\u306b F5 \u9023\u6253\u3057\u3066\u4e88\u7d04\u3057\u305f\u3002<\/figcaption><\/figure>\n\n\n\n<p>\u3000\u30c4\u30a4\u30fc\u30c8\u306f\u3053\u306e\u3088\u3046\u306b\u30ae\u30ea\u30ae\u30ea\u306b\u3055\u308c\u307e\u3059\u304c\u3001\u5b9f\u306f\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u306e\u30b5\u30a4\u30c8\u306b\u306f\u5546\u54c1\u30da\u30fc\u30b8\u304c\u3001\u305d\u306e\u65e5\u306e\u3082\u3063\u3068\u65e9\u3044\u6642\u9593\u304b\u3089\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002\u306a\u306e\u3067\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u306e\u30b5\u30a4\u30c8\u3092\u5b9a\u671f\u7684\u306b\u5de1\u56de\u3057\u3066\u3044\u308c\u3070\u3044\u3061\u65e9\u304f\u60c5\u5831\u3092\u30ad\u30e3\u30c3\u30c1\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\u3002\u305d\u3053\u3067<strong><span style=\"color: #ff0000\" class=\"text-color\">\u5de1\u56de\u3092\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u3063\u3066\u3001bot \u306b\u901a\u77e5\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f<\/span><\/strong>\u3002<\/p>\n\n\n\n<div class=\"wp-block-luxe-blocks-topic\" style=\"margin-top:10px;margin-bottom:30px\"><div class=\"wp-block-luxe-blocks-topic-title\" style=\"color:#fff;background-color:#006edc;border:1px solid #006edc;border-radius:5px 5px 0 0;padding:3px 15px\"><span>\u4eca\u56de\u8ffd\u52a0\u3057\u305f\u901a\u77e5\u306e\u8a73\u7d30<\/span><\/div><div class=\"wp-block-luxe-blocks-topic-content\" style=\"border:1px solid #006edc;border-radius:0 5px 5px 5px;padding:0px 15px 0px 15px\">\n<ul><li><span style=\"font-size: 18px\" class=\"font-size\">\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u306e\u5546\u54c1\u691c\u7d22\u300c\u4e88\u7d04\u30fb\u8ca9\u58f2\u671f\u9593\uff1a\u958b\u59cb\u524d\u300d\u3001\u300c\u30ad\u30fc\u30ef\u30fc\u30c9\uff1a\u30ac\u30f3\u30d7\u30e9\u300d\u3067\u8ffd\u52a0\u3055\u308c\u305f\u3082\u306e\u304c\u3042\u3063\u305f\u3089\u30c4\u30a4\u30fc\u30c8\u3059\u308b\u3002<\/span><\/li><li><span style=\"font-size: 18px\" class=\"font-size\">\u5de1\u56de\u306f\u5348\u524d\u4e2d\u306b\uff11\uff10\u5206\u9593\u9694\u3067\u5b9f\u884c\u3059\u308b\u3002\uff08\u30b5\u30a4\u30c8\u306e\u66f4\u65b0\u304c\u5348\u524d\u4e2d\u3067\u3042\u308b\u3053\u3068\u304c\u591a\u3044\u305f\u3081\uff09<\/span><\/li><li><span style=\"font-size: 18px\" class=\"font-size\">\u8ffd\u52a0\u3055\u308c\u305f\u30ad\u30c3\u30c8\u3092\u4e00\u3064\u4e00\u3064\u30c4\u30a4\u30fc\u30c8\u3059\u308b\u3002<\/span><span style=\"font-size: 18px\" class=\"font-size\">\uff08\u3053\u3053\u306f\u6539\u5584\u306e\u4f59\u5730\u3042\u308a\uff09<\/span><\/li><\/ul>\n<\/div><\/div>\n\n\n\n<h2>\u4eca\u56de\u306e\u69cb\u6210<\/h2>\n\n\n\n<h3>\u30d7\u30ed\u30b0\u30e9\u30e0<\/h3>\n\n\n\n<p>\u3000\u4eca\u56de\u4f5c\u6210\u3057\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u3053\u3061\u3089\u3067\u3059\u3002\u30dd\u30a4\u30f3\u30c8\u306f\u524d\u56de\u304b\u3089\u306e\u5de1\u56de\u304b\u3089\u8ffd\u52a0\u3055\u308c\u305f\u5546\u54c1\u3092\u898b\u3064\u3051\u308b\u305f\u3081\u306b\u5de1\u56de\u306e\u7d50\u679c\u3092\u3069\u3053\u304b\u306b\u4fdd\u5b58\u3057\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\u3002\u4eca\u56de\u3082 AWS Lamdba \u3067\u5b9f\u884c\u3055\u305b\u308b\u3064\u3082\u308a\u3060\u3063\u305f\u306e\u3067\u4fdd\u5b58\u5834\u6240\u3068\u3057\u3066 S3Bucket \u3092\u9078\u3073\u307e\u3057\u305f\u3002\u5de1\u56de\u7d50\u679c\u3092 JSON \u30d5\u30a1\u30a4\u30eb\u306b\u51fa\u529b\u3057\u3066 S3Bucket \u306b\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code># coding: UTF-8\nimport env\nimport logging\nimport json\nimport re\nimport datetime\nimport time\nimport os\nimport requests\nfrom bs4 import BeautifulSoup\nimport boto3\nimport post_twitter\n\nlogger = logging.getLogger()\nlogger.setLevel(logging.INFO)\nlogger.info(&#039;start &#039; + __file__)\n\ns3 = boto3.resource(&#039;s3&#039;)\n\n\ndef get_list_from_web(url):\n    html = requests.get(url)\n    soup = BeautifulSoup(html.content, &quot;html.parser&quot;, from_encoding=&quot;shift_jis&quot;)\n    search_result = soup.find(&quot;div&quot;,class_=&quot;pbFluid-p-card-list&quot;)\n\n    uls = search_result.find_all(&quot;ul&quot;,class_=&quot;pbFluid-p-card&quot;)\n    &quot;&quot;&quot;\n    &lt;ul class=&quot;pbFluid-p-card&quot;&gt;\n        &lt;li class=&quot;pbFluid-p-card__image&quot;&gt;\n            &lt;a href=&quot;\/item\/item-1000162659\/?source=csearch&amp;medium=pc&quot;&gt;\n                &lt;img height=&quot;150&quot; id=&quot;&quot; src=&quot;\/\/bandai-a.akamaihd.net\/bc\/img\/model\/b\/1000162659_1.jpg&quot; width=&quot;150&quot;\/&gt;\n            &lt;\/a&gt;\n        &lt;\/li&gt;\n        &lt;li class=&quot;pbFluid-p-card__label&quot;&gt;\n            &lt;img class=&quot;sRL_ItemIcon_20160229&quot; src=&quot;https:\/\/bandai-a.akamaihd.net\/bc\/img\/icon\/ITEM_RESERVE_BEFORE.gif&quot;\/&gt;\n            &lt;img class=&quot;sRL_ItemIcon_20160229&quot; src=&quot;https:\/\/bandai-a.akamaihd.net\/bc\/img\/icon\/RESERVE_202202.gif&quot;\/&gt;\n        &lt;\/li&gt;\n        &lt;li class=&quot;pbFluid-p-card__description&quot;&gt;\n            &lt;a href=&quot;\/item\/item-1000162659\/?source=csearch&amp;medium=pc&quot;&gt;\uff2d\uff27 1\/100 \u30a8\u30af\u30ea\u30d7\u30b9\u30ac\u30f3\u30c0\u30e0\u3010\uff12\uff10\uff12\uff12\u5e74\uff12\u6708\u767a\u9001\u3011&lt;\/a&gt;\n        &lt;\/li&gt;\n        &lt;li class=&quot;pbFluid-p-card__tooltip&quot;&gt;\n            &lt;a class=&quot;pbFluid-p-card__tooltip__detail&quot; href=&quot;\/item\/item-1000162659\/?source=csearch&amp;medium=pc&quot;&gt;\uff2d\uff27 1\/100 \u30a8\u30af\u30ea\u30d7\u30b9\u30ac\u30f3\u30c0\u30e0\u3010\uff12\uff10\uff12\uff12\u5e74\uff12\u6708\u767a\u9001\u3011&lt;\/a&gt;\n        &lt;\/li&gt;\n    &lt;\/ul&gt;\n    &quot;&quot;&quot;\n    list = []\n    for ul in uls:\n        label_imgs = ul.find(&quot;li&quot;,class_=&quot;pbFluid-p-card__label&quot;).find_all(&quot;img&quot;)\n        labels = []\n        for label_img in label_imgs:\n            label = re.sub(&#039;https:\/\/bandai-a.akamaihd.net\/bc\/img\/icon\/&#039;, &#039;&#039;, label_img[&#039;src&#039;])\n            labels.append(label)\n\n        item_img = ul.find(&quot;li&quot;,class_=&quot;pbFluid-p-card__image&quot;).find(&quot;img&quot;)[&#039;src&#039;]\n        img_url  = &#039;https:&#039; + item_img\n\n        tooltip = ul.find(&quot;li&quot;,class_=&quot;pbFluid-p-card__tooltip&quot;)\n        name = tooltip.text\n        link = &quot;https:\/\/p-bandai.jp&quot; + re.search(&#039;\/item\/item-[0-9]*\/&#039;, tooltip.a[&#039;href&#039;]).group()\n\n        list.append({&quot;name&quot;:name, &quot;url&quot;:link, &quot;label&quot;:labels, &quot;img&quot;:img_url})\n\n    new_list = json.dumps({&quot;p-bandai_release&quot;:list}, ensure_ascii=False, indent=2)\n    logger.info(&#039;got relese list from p-bandai.&#039;)\n    return list\n\ndef search_update(old_list, new_list):\n    updates = []\n    old_names = [d[&#039;name&#039;] for d in old_list]\n    for kit in new_list:\n        if kit[&#039;name&#039;] not in old_names:\n            updates.append(kit)\n    return updates\n\ndef get_preorder_open(url):\n    html = requests.get(url)\n    soup = BeautifulSoup(html.content, &quot;html.parser&quot;, from_encoding=&quot;shift_jis&quot;)\n    article_details_shop = soup.find(&quot;div&quot;,class_=&quot;article_details_shop&quot;)\n    return preorder_open\n\n#if __name__ == &#039;__main__&#039;:\ndef handler(event, context):\n    try:\n        now = datetime.datetime.now()\n\n        # \u6700\u65b0\u306e\u958b\u59cb\u524d\u8ca9\u58f2\u30fb\u4e88\u7d04\u30ea\u30b9\u30c8\u3092\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u304b\u3089\u53d6\u5f97\n        url = &quot;https:\/\/p-bandai.jp\/chara\/c0010\/?q=%83K%83%93%83v%83%89&amp;page=0&amp;n=60&amp;C5=30&quot;\n        new_list = get_list_from_web(url)\n        #new_list = json.load(open(&#039;new_list.json&#039;, &#039;r&#039;))\n\n        # \u524d\u56de\u53d6\u5f97\u3057\u305f\u30ea\u30b9\u30c8\u3092 S3Bucket \u304b\u3089\u53d6\u5f97\n        s3.meta.client.download_file(env.s3_buchket, &#039;gunpla.json&#039;, &#039;\/tmp\/gunpla.json&#039;)\n        logger.info(&#039;download previous list from s3bucket.&#039;)\n        old_list = json.load(open(&#039;\/tmp\/gunpla.json&#039;, &#039;r&#039;))\n        #old_list = json.load(open(&#039;old_list.json&#039;, &#039;r&#039;))\n\n        # \u524d\u56de\u3068\u306e\u5dee\u5206\u3092\u62bd\u51fa\n        update_list = search_update(old_list[&#039;gunplas&#039;], new_list)\n\n        if len(update_list) == 0:\n            logger.info(&#039;no update&#039;)\n        else:\n            for update in update_list:\n                kit_name  = update[&#039;name&#039;]\n                kit_url   = update[&#039;url&#039;]\n                labels = update[&#039;label&#039;]\n                label_jpn = &quot;&quot;\n                for label in labels:\n                    if label == &quot;ITEM_SALE_BEFORE.gif&quot;:\n                        label_jpn = &quot;\u3010\u8ca9\u58f2\u958b\u59cb\u524d\u3011&quot;\n                    elif label == &quot;ITEM_RESERVE_BEFORE.gif&quot;:\n                        label_jpn = &quot;\u3010\u4e88\u7d04\u958b\u59cb\u524d\u3011&quot;\n                    elif &quot;RESERVE_&quot; in label:\n                        ym = re.search(&#039;[0-9]+&#039;, label).group()\n                        y  = ym[:4]\n                        m  = ym[4:]\n                        label_jpn = label_jpn + &quot;\u3010&quot; + y + &quot;\u5e74&quot; + m + &quot;\u6708\u767a\u9001\u3011&quot; #\u301020yy\u5e74mm\u6708\u767a\u9001\u3011\n                    else:\n                        logger.warning(&#039;unexpected label &#039; + label)\n\n                text = &#039;\u3010&#039; + now.strftime(&quot;%m\/%d&quot;) + &#039;\u66f4\u65b0\u3011&#039; + label_jpn + &#039;\\n&#039; + kit_name + &#039;\u304c\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u306b\u65b0\u3057\u304f\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002\\n&#039; + kit_url\n                post_twitter.post(env.access_token,env.access_token_secret,env.api_key,env.api_secret,text)\n                logger.info(&#039;posted that updated p-bandai to twitter.&#039;)\n\n        # \u6700\u65b0\u306e\u30ea\u30b9\u30c8\u3092 S3Bucket \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\n        with open(&#039;\/tmp\/new_gunpla.json&#039;, &#039;w&#039;) as f:\n            json.dump({&#039;data&#039;:now.strftime(&quot;%Y-%m-%d&quot;), &#039;gunplas&#039;:new_list}, f, ensure_ascii=False, indent=2)\n        s3.meta.client.upload_file(&#039;\/tmp\/new_gunpla.json&#039;, env.s3_buchket, &#039;gunpla.json&#039;)\n        logger.info(&#039;uploaded new list to s3bucket.&#039;)\n\n    except Exception as e:\n        logger.exception(f&#039;{e}&#039;)<\/code><\/pre><\/div>\n\n\n\n<h3>\u5b9f\u884c\u74b0\u5883<\/h3>\n\n\n\n<p>\u3000\u5b9f\u884c\u74b0\u5883\u306f AWS \u306e\u4ee5\u4e0b\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30b5\u30fc\u30d0\u30ec\u30b9\u3067\u3059\u306d\u3002<\/p>\n\n\n\n<ul><li><span style=\"font-size: 17px\" class=\"font-size\">Lambda Function<\/span><\/li><li><span style=\"font-size: 17px\" class=\"font-size\">Cloudwatch Events<\/span><\/li><li><span style=\"font-size: 17px\" class=\"font-size\">S3 Bucket<\/span><\/li><\/ul>\n\n\n\n<p>\u4ee5\u4e0b\u304c tf \u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><code>resource &quot;aws_ecr_repository&quot; &quot;get_new_reserve_pbandai&quot; {\n  name = &quot;get_new_reserve_pbandai&quot;\n}\n\nresource &quot;aws_ecr_lifecycle_policy&quot; &quot;get_new_reserve_pbandai&quot; {\n  repository = aws_ecr_repository.get_new_reserve_pbandai.name\n\n  policy = &lt;&lt;EOF\n{\n    &quot;rules&quot;: [\n        {\n            &quot;rulePriority&quot;: 1,\n            &quot;description&quot;: &quot;Expire images older than 3 days&quot;,\n            &quot;selection&quot;: {\n                &quot;tagStatus&quot;: &quot;untagged&quot;,\n                &quot;countType&quot;: &quot;sinceImagePushed&quot;,\n                &quot;countUnit&quot;: &quot;days&quot;,\n                &quot;countNumber&quot;: 3\n            },\n            &quot;action&quot;: {\n                &quot;type&quot;: &quot;expire&quot;\n            }\n        }\n    ]\n}\nEOF\n}\n\nresource &quot;aws_iam_role&quot; &quot;get_new_reserve_pbandai&quot; {\n  name                = &quot;get_new_reserve_pbandai&quot;\n  managed_policy_arns = [&quot;arn:aws:iam::aws:policy\/service-role\/AWSLambdaBasicExecutionRole&quot;]\n\n  assume_role_policy = jsonencode({\n    Version = &quot;2012-10-17&quot;\n    Statement = [\n      {\n        Action = &quot;sts:AssumeRole&quot;\n        Effect = &quot;Allow&quot;\n        Sid    = &quot;&quot;\n        Principal = {\n          Service = &quot;lambda.amazonaws.com&quot;\n        }\n      },\n    ]\n  })\n\n  inline_policy {\n    name = &quot;inline_policy&quot;\n\n    policy = jsonencode({\n      Version = &quot;2012-10-17&quot;\n      Statement = [\n        {\n          Action = [\n            &quot;s3:GetObject&quot;,\n            &quot;s3:PutObject&quot;,\n            &quot;s3:HeadObject&quot;\n          ]\n          Effect = &quot;Allow&quot;\n          Resource = [\n            &quot;${aws_s3_bucket.get_new_reserve_pbandai.arn}&quot;,\n            &quot;${aws_s3_bucket.get_new_reserve_pbandai.arn}\/*&quot;\n          ]\n        },\n      ]\n    })\n  }\n}\n\nresource &quot;aws_lambda_function&quot; &quot;get_new_reserve_pbandai&quot; {\n  function_name = &quot;get_new_reserve_pbandai&quot;\n  package_type  = &quot;Image&quot;\n  memory_size   = 128\n  timeout       = 180\n  role          = aws_iam_role.get_new_reserve_pbandai.arn\n  image_uri     = &quot;653376028258.dkr.ecr.ap-northeast-1.amazonaws.com\/get_new_reserve_pbandai@sha256:5567050109ec704e66dcf6df1b6f37a4dcb7be50653684317160cec973d69b8d&quot;\n}\n\nresource &quot;aws_cloudwatch_log_group&quot; &quot;get_new_reserve_pbandai&quot; {\n  name              = &quot;\/aws\/lambda\/get_new_reserve_pbandai&quot;\n  retention_in_days = 7\n}\n\nresource &quot;aws_cloudwatch_event_rule&quot; &quot;get_new_reserve_pbandai&quot; {\n  name                = &quot;get_new_reserve_pbandai&quot;\n  description         = &quot;Run Lambda get_new_reserve_pbandai&quot;\n  schedule_expression = &quot;cron(0\/10 0-3 * * ? *)&quot; #daily09:00-12:00JST\u306b10\u5206\u304a\u304d\u306b\u5b9f\u884c\n}\n\nresource &quot;aws_cloudwatch_event_target&quot; &quot;get_new_reserve_pbandai&quot; {\n  rule = aws_cloudwatch_event_rule.get_new_reserve_pbandai.name\n  arn  = aws_lambda_function.get_new_reserve_pbandai.arn\n}\n\nresource &quot;aws_lambda_permission&quot; &quot;allow_cloudwatch_to_run_lambda&quot; {\n  statement_id  = &quot;AllowExecutionFromCloudWatch&quot;\n  action        = &quot;lambda:InvokeFunction&quot;\n  function_name = aws_lambda_function.get_new_reserve_pbandai.function_name\n  principal     = &quot;events.amazonaws.com&quot;\n  source_arn    = aws_cloudwatch_event_rule.get_new_reserve_pbandai.arn\n}\n\nresource &quot;aws_s3_bucket&quot; &quot;get_new_reserve_pbandai&quot; {\n  bucket = &quot;get-new-reserve-pbandai&quot;\n}<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u30d7\u30ec\u30df\u30a2\u30e0\u30d0\u30f3\u30c0\u30a4\u306b\u65b0\u3057\u304f\u30ac\u30f3\u30d7\u30e9\u304c\u8ffd\u52a0\u3055\u308c\u305f\u3089\u901a\u77e5\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n","protected":false},"author":1,"featured_media":2968,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"ja","_original_post":"https:\/\/doc-sin.life\/?p=2990"},"categories":[4],"tags":[19,55,60,74],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/doc-sin.life\/wp-content\/uploads\/2021\/08\/twitter_bandai-2.png?fit=800%2C328&ssl=1","_links":{"self":[{"href":"https:\/\/doc-sin.life\/index.php?rest_route=\/wp\/v2\/posts\/2990"}],"collection":[{"href":"https:\/\/doc-sin.life\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/doc-sin.life\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/doc-sin.life\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/doc-sin.life\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2990"}],"version-history":[{"count":0,"href":"https:\/\/doc-sin.life\/index.php?rest_route=\/wp\/v2\/posts\/2990\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/doc-sin.life\/index.php?rest_route=\/wp\/v2\/media\/2968"}],"wp:attachment":[{"href":"https:\/\/doc-sin.life\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/doc-sin.life\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/doc-sin.life\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}