【TP転職市場PJ日記その6】大詰め迎えてきたよ～バッチ編

#前回は
アカウントやユーザーの投稿した画面について書いていったね。
今回はプラスアルファ機能で検索の条件に一致したらメール通知機能を実装したので
そのあたりを書いていこうと思うよ。あとTwitterAPIについても。

#メール通知機能の概要
1:検索をした条件でログインしていないとき検索条件を設定してくれればサービス側で定期的に検索をする。
2:新しい登録であればメールで通知する。
こんな感じです。いわゆる賃貸の希望物件の条件登録と一緒のパターン。項目少ないから諸々大丈夫なはず。

#という訳で希望条件が一致したら通知機能のロジック紹介（バッチ処理）
・基本的には検索条件を保存しておくテーブルを用意して事前に登録
↓
・サーバー側の定期実行コマンドを実行（Cronで実行してく）
↓
・一致する物があればメール通知。


#メールの内容はこう。
![batch.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570502/e80a55bb-572c-d763-b14d-c3f7fd2ab2b0.png)


うーん...もうちょい捻る？いったんこれで行くね。

※ここで、バッチ処理で使うcronが動かなくてめっちゃハマった。
今回はcronのバッチ実行する設定を外部ファイルに記述して、デプロイの度に読み込ませる運用にしようと考えて
いたんだけど、行末に改行コードが原因で1日潰れた／(^o^)＼
（LFじゃないと動かないんだけど、ファイルの改行コード確認したらCRLFという改行コードになっててほんとやられた）

#TwitterApiの申請
・英文だらけで敷居高いかなと思ったけど、グーグル翻訳先生と一緒に行けば怖くなかった
わりとあっさりと申請も通ってAPI叩けるようになった。

#TwitterApiの利用申請をする理由
・使ってくれるウイイレユーザーは割とTwitterユーザが多い
・こみいった話になったらTwitter側のDMで直接やり取りしてもらう事でデータ維持のリスクを少しでも
減らせるし、まぁこのサービスで消えちゃまずいようなデータは管理したくないよｗｗ

#TwitterApi無事完了
こんな感じで取得できる。"id"の部分だけもらえればDM送付用のリンクが作れるのよ。
ちなみに鍵つきアカウントもこの手の情報までは見れるからね。＾＾

```

    {
        "id": ****,
        "id_str": "****",
        "name": "ゴローニャ",
        "screen_name": "GoroNya_10",
        "location": "",
        "description": "主にゲーム動画（ウイイレ）を上げたり配信したりします。\nこのご時世で、ゲームや配信で繋がる楽しさに目覚めちゃいました。（いい感じにおじさん）\n音楽系→IT系の人。\n猫飼っていて名前は「にゃんちゅう」です。",
        "url": null,
        "entities": {
            "description": {
                "urls": []
            }
        },
        "protected": false,
        "followers_count": 97,
        "friends_count": 92,
        "listed_count": 0,
        "created_at": "Sun Jul 19 17:43:59 +0000 2020",
        "favourites_count": 638,
        "utc_offset": null,
        "time_zone": null,
        "geo_enabled": false,
        "verified": false,
        "statuses_count": 829,
        "lang": null,
        "status": {
            "created_at": "Fri Jun 04 01:53:32 +0000 2021",
            "id": ***,
            "id_str": "***",
            "text": "****",
            "truncated": false,
            "entities": {
                "hashtags": [],
                "symbols": [],
                "user_mentions": [],
                "urls": []
            },
            "source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
            "in_reply_to_status_id": null,
            "in_reply_to_status_id_str": null,
            "in_reply_to_user_id": null,
            "in_reply_to_user_id_str": null,
            "in_reply_to_screen_name": null,
            "geo": null,
            "coordinates": null,
            "place": null,
            "contributors": null,
            "is_quote_status": false,
            "retweet_count": 0,
            "favorite_count": 1,
            "favorited": false,
            "retweeted": false,
            "lang": "ja"
        },
        "contributors_enabled": false,
        "is_translator": false,
        "is_translation_enabled": false,
        "profile_background_color": "F5F8FA",
        "profile_background_image_url": null,
        "profile_background_image_url_https": null,
        "profile_background_tile": false,
        "profile_image_url": "http://pbs.twimg.com/profile_images/1284907108111020032/Ra-KNXKw_normal.jpg",
        "profile_image_url_https": "https://pbs.twimg.com/profile_images/1284907108111020032/Ra-KNXKw_normal.jpg",
        "profile_banner_url": "https://pbs.twimg.com/profile_banners/1284906812832018432/1603183810",
        "profile_link_color": "1DA1F2",
        "profile_sidebar_border_color": "C0DEED",
        "profile_sidebar_fill_color": "DDEEF6",
        "profile_text_color": "333333",
        "profile_use_background_image": true,
        "has_extended_profile": true,
        "default_profile": true,
        "default_profile_image": false,
        "following": false,
        "follow_request_sent": false,
        "notifications": false,
        "translator_type": "none",
        "withheld_in_countries": []
    }
]
```

#次回は
サービス全体の動作確認と検証環境の構築、ついて書いていこうと思う。
Cronの他にもはまった部分はいくつもあって番外的に真面目に記事化予定してるよ。