[PYTHON] Ich möchte Airpods Pro, daher werde ich LINE benachrichtigen, wenn es eintrifft

Der Anfang der Dinge

Ich habe die Welle von Airpods Pro verpasst. Der Airpods Pro wurde Ende letzten Monats veröffentlicht, aber ich dachte, ich würde ihn kaufen, nachdem ich Sonys Beispiel Neucan und vergleichende Bewertungen gesehen hatte, aber als ich den Artikel las, war er ausverkauft. Es scheint, dass die Ankunft von Waren gelegentlich im direkt verwalteten Apple Store __ erfolgt. Überwachen Sie diese also und senden Sie eine Benachrichtigung __ an Ihre __LINE, sobald die Ankunft eintrifft.

Vorläufige Nachforschung

Problem, wie man Lagerinformationen erhält Anscheinend wird es richtig aktualisiert, wenn es jeden Morgen ankommt スクリーンショット 2019-11-15 13.19.36.png

Klicken Sie auf Datum bestätigen, um diesen Bildschirm zu erhalten. Informationen zu Geschäften in der Nähe erhalten Sie durch Eingabe der Postleitzahl. スクリーンショット 2019-11-15 13.25.15.png

Mit diesem Gefühl scheint es, dass Sie es per GET oder POST erhalten können, schauen Sie sich also das Netzwerk an 68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3235363139362f30656336353930312d353739382d383336632d343739332d3334663038623530363361362e706e67.png

Es gibt so etwas nicht wirklich

Sie können die Antwort in den Entwicklertools sehen Ich möchte das Verständnis erleichtern, daher werde ich versuchen, Informationen mit einer Anwendung zu erhalten, die GET oder POST wird スクリーンショット 2019-11-15 13.36.28.png Kam so viel

Teile ist die Teilenummer und Ort ist die Postleitzahl

Sehen Sie die Antwort richtig

Die soeben zurückgegebenen Lenspons werden in einem Geschäft zurückgegeben.

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äfektur Osaka",
        "storeImageUrl": "https://rtlimages.apple.com/cmc/dieter/store/4_3/R091.png?resize=828:*&output-format=jpg",
        "country": "JP",
        "city": "Stadt Osaka",
        "storeNumber": "R091",
        "partsAvailability": {
          "MWP22J/A": {
            "storePickEligible": true,
            "storeSearchEnabled": true,
            "storeSelectionEnabled": true,
            "storePickupQuote": "Sa 2019/12/07 Apfel Shinsaibashi",
            "pickupSearchQuote": "Datum des Eingangs:<br/>Sa 2019/12/07",
            "storePickupLabel": "Eingangsdatum:",
            "partNumber": "MWP22J/A",
            "purchaseOption": "",
            "ctoOptions": "",
            "storePickupLinkText": "Überprüfen Sie das Datum, das Sie erhalten können",
            "storePickupProductTitle": "AirPods Pro",
            "pickupDisplay": "ships-to-store"
          }
        },
        "phoneNumber": "06-4963-4500",
        "address": {
          "address": "Apfel Shinsaibashi",
          "address3": "Urban BLD Shinsaibashi",
          "address2": "1 Nishishinsaibashi, Chuo-ku-5-5",
          "postalCode": "542-0086"
        },
        "hoursUrl": "http://www.apple.com/jp/retail/shinsaibashi",
        "storeHours": {
          "storeHoursText": "Öffnungszeiten",
          "bopisPickupDays": "Tage",
          "bopisPickupHours": "Zeit",
          "hours": [
            {
              "storeTimings": "10:00~21:00",
              "storeDays": "Mond~Tag:"
            }
          ]
        },
        "storelatitude": 34.672,
        "storelongitude": 135.50007,
        "storedistance": 3.44,
        "storeDistanceWithUnit": "3.44 km",
        "storeDistanceVoText": "542-Entfernung von 0086: 3.44 km",
        "storelistnumber": 1,
        "storeListNumber": 1
      }

----------------Weiter nach unten----------------

Es scheint kein Problem zu geben, wenn Sie nur __storePickupQuote __ erhalten können

Schreiben Sie in Python

Wenn Sie es nur erhalten, können Sie es nur mit Anforderungen implementieren. Schreiben Sie es daher entsprechend

Erfassung von Inventarinformationen


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 'heute' in store_pickup:
            arrival.append({'Geschäft':store['address']['address'],
                            'Postleitzahl':store['address']['postalCode']})

    return arrival

Ich habe es vorerst geschrieben, wenn ich es angemessen erkläre Fügen Sie den zurückgegebenen json in das Wörterbuch ein Das Geschäft, das die Ware erhalten hat, hat heute nicht das Datum, also machen Sie ein solches Urteil Ich werde bestehen, wenn es heute gibt

Ich weiß nicht, wann die Inventarinformationen tatsächlich aktualisiert werden Stellen Sie einmal pro Minute zwischen 6:00 und 10:00 eine Anfrage.

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)

Wenn es auf Lager ist, bricht es aus der Schleife aus und benachrichtigt Sie Wenn nicht, Oryokuru bis 10 Uhr

LINE benachrichtigen

LINE registriert sich als Benachrichtigen und sendet es an sich selbst Lassen Sie mich darauf verweisen: Benachrichtigung mit Python an LINE senden

python


def line_notify(stores):
    line_notify_token = 'Zugangstoken'
    line_notify_api = 'https://notify-api.line.me/api/notify'

    if stores:
        strings=''
        for s in stores:
            strings += f'''
Geschäft: {s['Geschäft']}
Postleitzahl: {s['Postleitzahl']}\n'''

        message = f'''
Airpods Pro ist auf Lager.
Zielspeicher:{strings}
Warenkorb: 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)

Wenn es vorerst eine Ankunft gibt, wird dies LINE benachrichtigen Sie können es so kaufen, wie es ist, indem Sie die URL des Warenkorbs einfügen. (Es ist notwendig, es mit dem Terminal und dem Browser in den Warenkorb zu legen, um es im Voraus zu kaufen.)

Ich bin traurig, wenn es nicht kommt, obwohl es auf Lager ist, also werde ich versuchen, ob es funktioniert

Es gibt Airpods, probieren Sie diesen aus Ich habe die Informationen von Airpods früher in das Wörterbuch aufgenommen, daher werde ich sie verwenden

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

Jetzt renn.

25521.jpg

Ich habe eine Benachrichtigung erhalten, also ist es okay

Schließlich

LINE-Benachrichtigung Es ist sehr praktisch und scheint in Zukunft sehr nützlich zu sein.

__ Das größte Problem ist, ob ich morgens wach bin __

Recommended Posts

Ich möchte Airpods Pro, daher werde ich LINE benachrichtigen, wenn es eintrifft
Ich habe über Docker recherchiert und werde es zusammenfassen
Ich blieb stecken und überprüfte es
Ist es so viel einfacher geworden, als es zu centos8 wurde? 2 ~ Ich habe versucht, PHP ~ hinzuzufügen
Ich möchte es mit Python Lambda Django machen, aber ich werde aufhören
Ich habe das Verhalten von Argsort of Numpy nicht verstanden, deshalb werde ich es zusammenfassen
Ich habe ein Programm erstellt, um Sie per LINE zu benachrichtigen, wenn Schalter eintreffen