Ήταν μια καλή ηλιόλουστη μέρα στο Σιάτλ και η σύζυγός μου ήθελε να έχει το διάσημο ιογενές Dubai Chocolate Pistachio Shake. Με ενθουσιασμό, αποφασίσαμε να επισκεφθούμε το πλησιέστερο Shake Shack, και προς έκπληξή μας, πωλήθηκε και μας είπαν να τους καλέσουμε πριν από την επίσκεψη. Δεν υπάρχει καμία εγγύηση ότι θα είναι διαθέσιμο την επόμενη μέρα καθώς και λόγω της περιορισμένης προσφοράς. Δύο ημέρες αργότερα, πήγα πάλι εκεί για να δω αν θα υπήρχαν, και πάλι αντιμετώπισα την απογοήτευση. δεν μου άρεσε ο τρόπος, ή πρέπει να τους καλέσω για να ελέγξω για ένα στοιχείο ή να πάω στο κατάστημά τους για να ελέγξω αν είναι διαθέσιμο. Αυτό μου έδωσε μερικές ιδέες: Τι θα γινόταν αν υπήρχε μια τεχνητή νοημοσύνη που θα έκανε τις κλήσεις για μένα και θα με ενημέρωνε όταν χρειαζόμουν μια κράτηση, ή θα περίμενε σε εκείνη τη μακρά γραμμή για κλήσεις πελατών και θα συνδεόταν μαζί μου όταν ήμουν έτοιμος να μιλήσω με κάποιον; Μερικές εταιρείες εργάζονται ήδη για την αυτοματοποίηση αυτού. Υπάρχει τρόπος να ειδοποιηθείτε όταν ένα στοιχείο είναι διαθέσιμο στο Shake Shack; Εάν δεν υπάρχει, μπορώ να δημιουργήσω μια υποδομή cloud για αυτό; Συνεχίζοντας τις σκέψεις μου για τη δεύτερη ιδέα μου, άρχισα να ψάχνω στην ιστοσελίδα τους. είναι δυνατόν να ελέγξω αν ένα στοιχείο είναι διαθέσιμο και να το προσθέσω στο καλάθι για online παραγγελία, πράγμα που σημαίνει ότι υπάρχουν κάποιες κλήσεις δικτύου μέσω των οποίων μπορούμε να προσδιορίσουμε αν το Dubai Chocolate Pistachio Shake είναι διαθέσιμο. Implementation Εφαρμογή Για να λάβουμε τις πληροφορίες σχετικά με τη διαθεσιμότητα, χρειαζόμαστε μερικά σημεία δεδομένων. Υπάρχει τρόπος να αποκτήσετε πληροφορίες από το κατάστημα; Πώς να διακρίνετε αν ένα κατάστημα έχει ένα shake ή όχι; Για να πάρετε πληροφορίες από το κατάστημα, όταν ανοίγουμε το στοιχείο επιθεώρησης και κοιτάζουμε τις κλήσεις δικτύου, όταν επιλέγουμε την Ουάσιγκτον, βλέπουμε μερικές ενδιαφέρουσες κλήσεις. Η πολιτεία της Ουάσιγκτον έχει επτά τοποθεσίες και πρέπει να γνωρίζουμε ποια από αυτές έχει το κούνημα. Αν κοιτάξουμε την ανταπόκριση των πληροφοριών της περιοχής, καταφέραμε να πάρουμε όλες τις κρατικές πληροφορίες. curl 'https://ssma24.com/production-location/regions?isAlpha=true' \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ -H 'authorization: Basic removedSecretCodeHere==' \ -H 'cache-control: no-cache' \ -H 'origin: https://shakeshack.com' \ -H 'platform-os: macos' \ -H 'platform-version: 1.71.20' \ -H 'pragma: no-cache' \ -H 'priority: u=1, i' \ -H 'referer: https://shakeshack.com/' \ -H 'sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: cross-site' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ -H 'x-requested-with: XMLHttpRequest' Σύμφωνα με αυτό, το WA ID είναι a3d65b58-ee3c-42af-adb9-9e39e09503c3, και βλέπουμε τις πληροφορίες αποθήκης αν περάσουμε regionId στο API. curl 'https://ssma24.com/production-location/locations?regionId=a3d65b58-ee3c-42af-adb9-9e39e09503c3&channel=WEB&includePrivate=false' \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ -H 'authorization: Basic removedSecretCodeHere' \ -H 'cache-control: no-cache' \ -H 'origin: https://shakeshack.com' \ -H 'platform-os: macos' \ -H 'platform-version: 1.71.20' \ -H 'pragma: no-cache' \ -H 'priority: u=1, i' \ -H 'referer: https://shakeshack.com/' \ -H 'sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: cross-site' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ -H 'x-requested-with: XMLHttpRequest' Αυτές οι πληροφορίες δεν είναι ακόμα αρκετές μέχρι να γνωρίζουμε πώς να φτάσουμε σε μια σελίδα καταστήματος και να προσδιορίσουμε τη διαθεσιμότητα. Εάν ένα κατάστημα έχει ένα shake, θα εμφανίσει το Dubai shake στην ενότητα shake. Και αφού ερευνήσω τις κούρεμα κλήσεις, βλέπω την κλήση για την επιλογή μενού. curl 'https://ssma24.com/v1.0/locations/82099/menus?includeOptionalCategories=utensils&platform=web' \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ -H 'authorization: Basic removedSecretCodeHere==' \ -H 'cache-control: no-cache' \ -H 'channel: WEB' \ -H 'origin: https://shakeshack.com' \ -H 'platform-os: macos' \ -H 'platform-version: 1.71.20' \ -H 'pragma: no-cache' \ -H 'priority: u=1, i' \ -H 'referer: https://shakeshack.com/' \ -H 'sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: cross-site' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ -H 'x-requested-with: XMLHttpRequest' Εάν υπάρχει ένα shake, τότε το βλέπουμε στην ενότητα προϊόντων. Εάν ένα κατάστημα δεν το έχει, τότε δεν θα το δούμε στην απάντηση. Έτσι, το μόνο που χρειάζεται να κάνουμε είναι να πάρετε όλες τις πληροφορίες του καταστήματος και να επαληθεύσουμε ποια καταστήματα έχουν το κούνημα. Αν κοιτάξετε στα ερωτήματα του καταστήματος, το oloId του συνδέεται στα ερωτήματα που σχετίζονται με ένα κατάστημα. Αυτό μπορεί να χαρτογραφηθεί με τις πληροφορίες του καταστήματος από τα προηγούμενα ερωτήματα, με τα οποία ήμουν σε θέση να πάρω όλα τα αναγνωριστικά καταστήματος. Με κάποια βασική γραφή shell, ήμουν σε θέση να δημιουργήσω αυτό το curl script, το οποίο θα πει ποιο κατάστημα θα έχει το shake. for store in 203514 236001 265657 82099 62274 96570 203515; do echo $store curl "https://ssma24.com/v1.0/locations/$store/menus?includeOptionalCategories=utensils&platform=web" \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ -H 'authorization: Basic removedSecretCodeHere==' \ -H 'cache-control: no-cache' \ -H 'channel: WEB' \ -H 'origin: https://shakeshack.com' \ -H 'platform-os: macos' \ -H 'platform-version: 1.71.20' \ -H 'pragma: no-cache' \ -H 'priority: u=1, i' \ -H 'referer: https://shakeshack.com/' \ -H 'sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: cross-site' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ -H 'x-requested-with: XMLHttpRequest' | jq| grep '"name": "Dubai Chocolate Pistachio Shake",' done Όπου κάθε κατάστημα είναι το storeId και χρησιμοποίησα τη βιβλιοθήκη jq για να μορφοποιήσω την απάντηση σε έξοδο JSON, και έκανα ένα χτύπημα σε αυτό το όνομα, τα καταστήματα που έχουν το κτύπημα θα δώσουν ένα χτύπημα. Δειγματοληπτική απάντηση Με βάση αυτό, γνωρίζουμε ότι τα καταστήματα 82099, 62274, και 96570 έχουν τα κουνήματα, και πήρα τη διεύθυνση του καταστήματος από τις προηγούμενες κλήσεις και πήρα τα κουνήματα. :) Conclusion Συμπέρασμα Σε αυτό το έγγραφο, εξετάσαμε τις κλήσεις δικτύου για να προσδιορίσουμε τις πληροφορίες που χρειαζόμαστε και επίσης βρήκαμε έναν τρόπο να λάβουμε πληροφορίες από το κατάστημα μέσω των κλήσεων δικτύου τους. Αυτό θα είναι μια πρόοδος που θα αφαιρέσει ορισμένες θέσεις εργασίας που σχετίζονται με QA από τη βιομηχανία (δεν είμαστε εκεί ακόμα, αλλά θα είμαστε σε αυτή τη θέση πολύ σύντομα). Οι περισσότερες από τις προσεγγίσεις που είδαμε σήμερα ήταν χειροκίνητες.Στα επόμενα άρθρα μου, θα δείξω πώς μπορούμε να πάρουμε αυτή την απλή ιδέα και να χτίσουμε μια υποδομή cloud γύρω από αυτήν. Μια κλήση χωρίς διακομιστή με βάση το cloud για να πάρετε τις πληροφορίες από το διαδίκτυο. Μια υπηρεσία ενεργοποίησης που βασίζεται στο cloud που θα ενεργοποιήσει την κλήση χωρίς διακομιστή. Ένα σύστημα αποθήκευσης για την αποθήκευση αυτών των δεδομένων για προσωρινή αποθήκευση - πού μπορούμε να αποθηκεύσουμε τις απαντήσεις; Ένα σύστημα ειδοποιήσεων για την ειδοποίηση μέσω μιας εφαρμογής για κινητά ή με διάφορους άλλους τρόπους. Εάν έχουμε αρκετά σημεία δεδομένων, θα σας δείξω πώς να δημιουργήσετε ένα μοντέλο ML χρησιμοποιώντας σπάνια σημεία δεδομένων. Αυτό είναι για εκπαιδευτικούς σκοπούς. εγώ και ο συνεργάτης μου (SGG) πήρα αυτό το πραγματικό παράδειγμα για να οικοδομήσουμε μια υποδομή cloud, και ο κώδικας και άλλα αντικείμενα δεν θα δημοσιευθούν για να εξασφαλιστεί ότι οι ιστότοποι Shake Shack δεν είναι υπερφορτωμένοι.