---
# System prepended metadata

title: 【50期】Python勉強会　第7回
tags: [Python勉強会]

---

###### tags: `Python勉強会`

# 【50期】Python勉強会　第7回

:::info
**＜第7回Web会議日程＞**
2023年05月17日（水）　19:00から

:::


## 第7回　課題

### ・課題の前に。。。

<details>
<summary>修正箇所</summary>
    
<br>
各自第6回で対応したLambdaに以下の修正を追加してください。

#### ①lambdaに「s3_function.py」というファイルを新規追加

・「NewFile」をクリック
![](https://hackmd.io/_uploads/HkbUmCxHn.png)

・展開した「s3_function.py」を反映し、「Save As...」をクリック
※14行目の「fm_pys_XXX.json」は各自の番号に変更してください

![](https://hackmd.io/_uploads/HkIxEReHh.png)

・FileNameに「s3_function.py」と入力し、「Save」をクリック
![](https://hackmd.io/_uploads/BkF8N0xSh.png)

・「<span style="color:blue">lambda_function.py</span>」で「s3_function」をインポート

```python
import s3_function
```
    
#### ②頻出処理の変数化

・IF分の前で、LINEの入力内容を「from_text」として定義
    
```python
from_text = json.loads(event['body'])['events'][0]['message']['text']
```


・IF分の後で、LINEへの応答文字列を「to_text」として定義

```python
params['messages'][0]['text'] = to_text 
``` 

#### ③入力内容が「入力」「出力」から始まった場合の分岐追加

・各自の関数の最後のELIFの後に、以下の記述を追加



```python
    # LINEで入力内容が「入力」から始まった場合
    elif from_text.startswith('入力'):
        # s3_functionモジュールのs3_input関数を呼び出す
        to_text = s3_function.s3_input(from_text)
        
    # LINEで入力内容が「出力」から始まった場合        
    elif from_text.startswith('出力'):
        # s3_functionモジュールのs3_output関数を呼び出す
        to_text = s3_function.s3_output(from_text)
``` 



</details>




### ・課題
**現在、「<span style="color:blue">lambda_function.py</span>」は、以下のようにLINEで入力した場合、**
**2行目をキー、3行目を値としたJSONファイルをS3に書き込みます。**


![](https://hackmd.io/_uploads/HJhh5w542.png)


**上記に以下のようにLINEで入力した場合、S3のJSONファイルを読み込み、**
**キーに対応する値をに応答する処理を追加してください**

![](https://hackmd.io/_uploads/BJqp9Pq4n.png)



-----
### ・前回からの変更点


![](https://hackmd.io/_uploads/BkWnXbi43.png)


①個人のスマホからLine公式アカウントにメッセージ送信
②Line公式からWebhookしたAPI GatewayのURLへメッセージを送信
③API Gatewayに関連付けられたLambdaを呼び出し
<span style="color:red">④S3にあるファイルを読み込み</span>
⑤Lambdaで作り込んだ処理に沿ってメッセージを応答


------

### ・「<span style="color:blue">s3_function.py</span>」概要



#### 1 . S3ファイル読み込み

S3にある「fm_pys_XXX.json」を読み込み、
jsonデータをPython処理のため辞書型として変数「json_data」に格納

#### 2 . s3_input関数を定義（入力内容をS3に書き込む）

LINEの入力内容が「入力」から始まった場合（startswith）の処理を定義

 ```python
'入力\n明日の予定\n仕事'
 ```

入力内容を改行コードで区切って変数「str」にリスト型で格納

 ```python
['入力', '明日の予定', '仕事']
 ```

「str」の要素数が2より大きい場合、3要素目以降をfor文で変数「Register」に追記
「json_data」にリストの2要素目をキー、「Register」を値とした辞書型の要素を追加

 ```python
{'明日の予定': '仕事'}
 ```

「json_data」をjson形式に置換し、S3にアップロード


------



### ・JSONについて
:::warning

**<JSONとは>**
「JavaScript Object Notation」の略で、「JavaScriptのオブジェクトの書き方を元にしたデータ定義方法」のこと

**<JSONの形式>**
・{} の中にキーと値をコロンで区切って記述
・カンマで区切ると、キーと値の組み合わせを複数記述可能
・[]を使うことで配列の表現も可能

⇒Pythonでは、**辞書型**として取り込むことが可能

:::

### ・ヒント

<details>
<summary>ヒント</summary>
    
・LINEの入力内容が「出力」から始まった場合に実行される「s3_output」関数の処理を修正してください。
・LINEの入力内容を改行コードで区切って、2要素目をキーとして利用してください
・「json_data」に辞書形式でデータが格納されているため、入力内容2行目をキーとして辞書から値を取り出してください


</details>


