[PYTHON] Je veux Airpods Pro donc j'informerai LINE quand il arrivera

Le début des choses

J'ai raté la vague des Airpods Pro. L'Airpods Pro est sorti à la fin du mois dernier, mais je pensais l'acheter après avoir vu l'exemple de Sony Neucan et une revue comparative, mais au moment où j'ai lu l'article, il était épuisé. Il semble que l'arrivée de marchandises se fasse occasionnellement sur l'Apple Store géré directement, alors surveillez-le et envoyez une notification __ à votre __LINE dès l'arrivée.

Recherche préliminaire

Problème d'obtention des informations d'entreposage Apparemment, il est mis à jour correctement quand il arrive chaque matin スクリーンショット 2019-11-15 13.19.36.png

Cliquez sur Confirmer la date pour recevoir cet écran. Vous pouvez obtenir des informations sur les commerces à proximité en entrant le code postal. スクリーンショット 2019-11-15 13.25.15.png

Avec ce sentiment, il semble que vous puissiez l'obtenir par GET ou POST, alors regardez le réseau 68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3235363139362f30656336353930312d353739382d383336632d343739332d3334663038623530363361362e706e67.png

Il y a quelque chose comme ça, ce n'est pas vraiment ça

Vous pouvez voir Response dans les outils de développement Je veux faciliter la compréhension, je vais donc essayer d'obtenir des informations avec une application qui GET ou POST スクリーンショット 2019-11-15 13.36.28.png Venu tellement

pièces est le numéro de pièce et l'emplacement est le code postal

Voir la réponse correctement

Les lenspons que je viens de retourner seront retournés dans un magasin.

response


{
  "head": {
    "status": "200",
    "data": {}
  },
  "body": {
    "stores": [
      {
        "storeEmail": "[email protected]",
        "storeName": "Shinsaibashi",
        "reservationUrl": "http://www.apple.com/jp/retail/shinsaibashi",
        "makeReservationUrl": "http://www.apple.com/jp/retail/shinsaibashi",
        "state": "Préfecture d'Osaka",
        "storeImageUrl": "https://rtlimages.apple.com/cmc/dieter/store/4_3/R091.png?resize=828:*&output-format=jpg",
        "country": "JP",
        "city": "Ville d'Osaka",
        "storeNumber": "R091",
        "partsAvailability": {
          "MWP22J/A": {
            "storePickEligible": true,
            "storeSearchEnabled": true,
            "storeSelectionEnabled": true,
            "storePickupQuote": "Sam 2019/12/07 Pomme Shinsaibashi",
            "pickupSearchQuote": "Date de réception:<br/>Sam 2019/12/07",
            "storePickupLabel": "Date de réception:",
            "partNumber": "MWP22J/A",
            "purchaseOption": "",
            "ctoOptions": "",
            "storePickupLinkText": "Vérifiez la date à laquelle vous pouvez recevoir",
            "storePickupProductTitle": "AirPods Pro",
            "pickupDisplay": "ships-to-store"
          }
        },
        "phoneNumber": "06-4963-4500",
        "address": {
          "address": "Shinsaibashi aux pommes",
          "address3": "Urbain BLD Shinsaibashi",
          "address2": "1 Nishishinsaibashi, Chuo-ku-5-5",
          "postalCode": "542-0086"
        },
        "hoursUrl": "http://www.apple.com/jp/retail/shinsaibashi",
        "storeHours": {
          "storeHoursText": "heures de travail",
          "bopisPickupDays": "Journées",
          "bopisPickupHours": "temps",
          "hours": [
            {
              "storeTimings": "10:00~21:00",
              "storeDays": "Mois~journée:"
            }
          ]
        },
        "storelatitude": 34.672,
        "storelongitude": 135.50007,
        "storedistance": 3.44,
        "storeDistanceWithUnit": "3.44 km",
        "storeDistanceVoText": "542-Distance de 0086: 3.44 km",
        "storelistnumber": 1,
        "storeListNumber": 1
      }

----------------Continuez vers le bas----------------

Il ne semble y avoir aucun problème si vous ne pouvez obtenir que __storePickupQuote __

Ecrire en Python

Si vous l'obtenez, vous ne pouvez l'implémenter qu'avec des requêtes, alors écrivez-le correctement

Acquisition des informations d'inventaire


def get_store_status(_parts, _location):
    arrival = []
    url =  "https://www.apple.com/jp/shop/retail/pickup-message"
    param = {"parts.0": _parts, "location": _location}

    response = requests.get(url, params=param)
    json_data = json.loads(response.text)

    stores = json_data['body']['stores']
    for store in stores:
        store_pickup = store['partsAvailability'][_parts]['storePickupQuote']

        if 'aujourd'hui' in store_pickup:
            arrival.append({'Boutique':store['address']['address'],
                            'Code postal':store['address']['postalCode']})

    return arrival

Je l'ai écrit pour le moment, si je l'explique correctement Mettez le json retourné dans le dictionnaire Le magasin qui a reçu les marchandises a aujourd'hui, pas la date, alors faites un tel jugement Je passerai s'il y a aujourd'hui

Je ne sais pas quand les informations d'inventaire seront réellement mises à jour, donc Faites une demande une fois par minute entre 6h00 et 10h00.

python


def start_job():
    parts = {'AirpodsPro':'MWP22J/A', 'Airpods':'MV7N2J/A'}
    location = '530-0000'

    end_stamp = datetime.now().timestamp() + (60 * 60 * 4)

    while True:
        now = datetime.now().timestamp()
        arrival = get_store_status(parts['AirpodsPro'], location)

        if arrival or now > end_stamp:
            line_notif(arrival)
            break

        time.sleep(60)

def trigger():
    schedule.every().day.at('06:00').do(start_job)
    while True:
        schedule.run_pending()
        time.sleep(1)

S'il y a du stock, vous serez averti en sortant de la boucle Sinon, Oryokuru jusqu'à 10 heures

Notifier LINE

LINE s'enregistre en tant que Notify et vous l'envoie Permettez-moi de me référer à ceci - Envoyer une notification à LINE avec Python

python


def line_notify(stores):
    line_notify_token = 'Jeton d'accès'
    line_notify_api = 'https://notify-api.line.me/api/notify'

    if stores:
        strings=''
        for s in stores:
            strings += f'''
Boutique: {s['Boutique']}
Code postal: {s['Code postal']}\n'''

        message = f'''
Airpods Pro est en stock.
Magasin cible:{strings}
Panier: https://www.apple.com/jp/shop/bag
        '''

        payload = {'message': message}
        headers = {'Authorization': 'Bearer ' + line_notify_token}
        requests.post(line_notify_api, data=payload, headers=headers)

S'il y a une arrivée pour le moment, cela informera LINE Vous pouvez l'acheter tel quel en collant l'URL du panier. (Il est nécessaire de le mettre dans le panier avec le terminal et le navigateur pour acheter à l'avance)

Je suis triste si ça ne vient pas même si c'est en stock alors j'essaierai si ça marche

Il y a des airpods alors essayez celui-ci J'ai mis les informations des Airpods dans le dictionnaire plus tôt, donc je vais les utiliser

arrival = get_store_status(parts['Airpods'], location)

Maintenant, cours.

25521.jpg

J'ai une notification donc ça va

finalement

LINE Notify C'est très pratique, cela semble être très utile à l'avenir.

__ Le plus gros problème est de savoir si je suis réveillé le matin __

Recommended Posts

Je veux Airpods Pro donc j'informerai LINE quand il arrivera
J'ai fait des recherches sur Docker, donc je vais le résumer
Je suis resté coincé alors je l'ai examiné
Est-ce devenu tellement plus facile quand il est devenu centos8? 2 ~ J'ai essayé d'ajouter PHP ~
Je veux le faire avec Python lambda Django, mais je vais m'arrêter
Je n'ai pas compris le comportement d'argsort de numpy, donc je vais le résumer
J'ai créé un programme pour vous avertir par LINE lorsque les commutateurs arrivent