먼 곳에서 식사를 하다

23402 단어 webdevjavascriptazure

나에 관하여


안녕하세요!저는 애니타라고 하는데 현재 시카고 일리노이대학 컴퓨터과학과 3학년 학생입니다.내가 학교에서 일하지 않을 때, 내가 가장 좋아하는 취미는 자전거 타기, 밥 짓기, 그림 그리기 등이었다.

​ 나 완전 미식가야.내가 가장 좋아하는 사교 활동 중의 하나는 바로 친구와 밥을 먹으러 나가는 것이다.나는 시카고의 대면 수업을 완전히 놓쳤다. 왜냐하면 이것은 나에게 거의 매주 새로운 배달 장소를 시도할 수 있다는 핑계를 주었기 때문이다.만약 네가 이 도시에 왔었다면, 나는 네가 가는 것을 매우 추천한다Brightwok Kitchen!
밥 먹을 곳을 선택하는 것은 항상 나의 어려운 문제이다. 나는 항상 다음과 같은 몇 가지 요소를 고려한다.
  • 편의성 - 나는 단지 음식을 먹기 위해 도로 여행을 하는 그런 사람이 아니다.
  • 맛있는 음식 - 초밥에 대한 나의 갈망은 내가 인정하고 싶은 것보다 훨씬 많다.
  • 거의 이렇다.저는 보통 그렇게 까다롭지 않아요.😊

    거리가 얼마나 됩니까?🚗


    ​ Dine the Distance는 두 개의 점 (당신과 친구) 사이에서 zip 위치, 한 개의 식당 요리, 그리고 중립적인 중간 위치에서 식당 추천을 제공하는 웹 응용 프로그램이다.각 레스토랑 추천은 아주맵스 API에서 요청한 것으로 해당 레스토랑 홈페이지, 메뉴, 전화번호, 주소를 가리키는 링크가 담겨 있다.Dine the Distance는 간편한 음식 위치를 제공하면서 조리 선호도에 따라 결과를 필터링한다.그 창설은 당신과 친구가 만나고 먹을 장소를 결정하지 못하는 것을 피하기 위해서다.

    이제 프로젝트를 구축하기 위해 수행한 단계와 향후 프로젝트를 복제하는 데 필요한 세부 사항에 대해 살펴보겠습니다.

    Azure 기능 응용 프로그램 만들기💻

  • Azure 포털로 이동하여 노드를 사용하는 기능 응용 프로그램 자원을 만듭니다.js 실행 시 창고입니다.
  • 배포 후 자원에 HTTP 트리거를 추가합니다.이것이 바로 우리가 우리의 응용 프로그램에 백엔드 코드를 제공할 곳입니다.
  • 이 함수를 사용하기 전에 필요한 패키지 의존항을 설치해야 합니다.터미널에서 'npm init-y' 를 실행해서 패키지를 만듭니다.json 파일로 의존항을 저장합니다.다음에 다음 의존항(npm 설치)을 설치합니다.
  • 노드 획득
  • HTTP 요청
  • https://www.npmjs.com/package/node-fetch#api
  • 미국 지퍼
  • 사용자가 입력한 우편번호를 위도와 경도 좌표
  • 로 변환
  • https://www.npmjs.com/package/us-zips
  • geolib
  • 두 좌표 위치
  • 사이의 중점을 찾다
  • https://www.npmjs.com/package/geolib
  • 프런트엔드✨

  • 사용자가 입력할 수 있는 폼을 만듭니다
  • <form onsubmit="handle(event)" enctype="multipart/form-data">
        <div class="row">
            <div class="form-group col-md-6">
                <input type="text" name="zip1" placeholder="Zip Code 1" required>
                <input type="text" name="phone1" placeholder="Phone Number 1" required>
            </div>
    
            <div class="form-group col-md-6 mt-3 mt-md-0">
                <input type="text" name="zip2" placeholder="Zip Code 2" required>
                <input type="text" name="phone2" placeholder="Phone Number 2" required>
            </div>
        </div>
    
        <div class="text-center" style="padding-top: 30px;">
            <input type="text" name="cuisine" placeholder="Food Cuisine" required>
        </div>
        <div class="text-center"><button type="submit">Find Food!</button></div>
    </form>
    
    ​ 사용자의 위치, 연락처, 음식 선택 정보를 포착하려면 색인에 폼을 만들어야 합니다.html 파일.이 테이블에 꼭 필요한 주요 요소는 다음과 같습니다.
  • 두 사용자의 우편 번호 위치용 입력 2개
  • 사용자 전화 번호 2개 입력
  • 폼 데이터를 HTTP 트리거(dineTrigger)에 보내는 제출 단추
  • 사용자의 폼 데이터를 HTTP 트리거에 보내기 (dine Trigger)
  •   var functionUrl = "/api/dineTrigger"
      const resp = await fetch (functionUrl, {
          method: 'POST',
          body:JSON.stringify({zip1, zip2, cuisine}),
          headers: {
            'Content-Type': 'application/json'
          },
      });
    
      var data = await resp.json();
      var newData = JSON.stringify(data.results);
      var obj = JSON.parse(newData);
    
    ​ 사용자의 우편 번호와 요리 정보를 포함하는 대상을 보내고 JSON 응답체를 기다리면 이 응답체는 전방에 관련 식당 정보를 채우는 것으로 해석될 수 있다.

    백엔드⚙️


    HTTP 트리거 1(dineTrigger)


    우리의 첫 번째 HTTP 트리거는 식당 정보를 검색하기 위해 Azure Maps에 사용자 우편번호와 요리 정보를 보낼 것입니다.
  • 우편 번호를 좌표로 변환하고 중점을 찾습니다.
  •    module.exports = async function (context, req) {
    
           var body = req.body;
    
           //zip code 1 -> latitude and longitude (us-zips) -> zip1Response
           //zip code 2 -> latitude and longitude (us-zips) -> zip2Response
           // midpoint lat lon (geolib) -> centerCoords 
    
           var zip1 = body.zip1;
           var zip2 = body.zip2;
    
           var zip1Response = usZips[zip1];
           var zip2Response = usZips[zip2];
    
           var centerCoords = geolib.getCenterOfBounds([
               { latitude: zip1Response["latitude"], longitude: zip1Response["longitude"] },
               { latitude: zip2Response["latitude"], longitude: zip2Response["longitude"] },
           ]);
    
           var cuisine = body.cuisine;
    
           var testResult = await analyzeCoords(centerCoords["latitude"], centerCoords["longitude"], cuisine);
    
           context.res = {
               // status: 200, /* Defaults to 200 */
               body: testResult
           };
       }
    
    ​ 식당 데이터를 요청하기 전에, 우리는 사용자가 입력한 두 우편번호 위치 사이의 중점을 찾아야 한다.이것이 바로 미국 ZIP와 Geolib 노드 패키지가 유용한 곳입니다!먼저 usZips 함수를 사용하여 사용자의 우편 번호 위치를 각 위도/경도 좌표를 가진 JSON 객체로 변환합니다.다음에, 우리는 이 좌표를 사용하여 Geolib을 통해 중점을 찾을 것이다.경계 중심을 가져옵니다.마지막으로 중심 위도, 중심 경도와 선호하는 사용자 음식을 다른 함수(analyze Coords)에 전달하여 이 데이터를 Azure Maps API로 보냅니다.
  • 식당 데이터 요청
  •    async function analyzeCoords(latitude, longitude, cuisine){ 
    
           const subscriptionKey = process.env['map-key']; 
           const uriBase = 'https://atlas.microsoft.com' + '/search/fuzzy/json';
    
           let params = new URLSearchParams({
               'api-version': '1.0',
               'query': cuisine + ' ' + 'restaurant',
               'subscription-key': subscriptionKey,
               'lat': latitude,
               'lon': longitude,
               'limit': 10
           })
    
    
           let resp = await fetch(uriBase + '?' + params.toString(), {
               method: 'GET'
           })
    
           let data = await resp.json();
    
           return data; 
       }
    
    ​ analyzeCoords(위도, 경도, 요리) 함수를 자세히 살펴보자.이 함수에서 URL 검색 매개 변수를 채우고 응답 데이터에 대해 GET 요청을 실행해야 합니다. 사용자가 앞에서 볼 수 있도록 이 데이터를 분석할 것입니다.
    URL 매개 변수를 추가하거나 수정하려면 API 문서 자유 형식 검색을 참조하십시오.
    https://docs.microsoft.com/en-us/rest/api/maps/search/getsearchfuzzy

    HTTP 트리거 2 (msgTrigger)


    우리의 두 번째 HTTP 트리거는 사용자가 선택한 식당을 지시하는 문자메시지를 보낼 것이다.
  • HTTP 트리거의 함수에 Twilio 바인딩을 추가합니다.json 파일
  •    {
         "type": "twilioSms",
         "name": "message",
         "accountSidSetting": "TwilioAccountSid",
         "authTokenSetting": "TwilioAuthToken",
         "from": "+1425XXXXXXX",
         "direction": "out",
         "body": "Azure Functions Testing"
       }
    
    ​ 당신은 create a Twilio Account 정확한 accountsID, authToken과 Twilio 전화번호로 Twilio 자원 귀속을 채워야 합니다.이 프로젝트에서 식당 주소가 필요한 두 사용자에게 각각 별도의 텍스트를 보내기 위해 두 개의 연결을 만들었습니다.
  • 사용자의 식당 선택을 HTTP 트리거(msgTrigger)에 보내기
  •    async function sendAddress(phone1, phone2, address, name){
         var functionUrl = "/api/msgTrigger";
         const resp = await fetch (functionUrl, {
           method: 'POST',
           body:JSON.stringify({phone1, phone2, address, name}),
           headers: {
             'Content-Type': 'application/json'
           },
         });
       }
    
    ​ dineTrigger에 폼 정보를 포함하는 대상을 보내는 것과 유사하게 사용자의 전화번호와 식당 위치를 포함하는 대상을 새로운 HTTP 트리거에 보내는 또 다른 POST 요청을 보내야 합니다.
  • 두 사용자에게 선택한 식당 주소의 텍스트 보내기
  •    module.exports = async function (context, req) {
    
           var body = req.body;
           var phone1 = body.phone1;
           var phone2 = body.phone2;
           var address = body.address;
           var restaurantName = body.name;
    
           var txtMessage = "Thanks for using Dine the Distance! Here's the address to go to " + restaurantName + ": " + address;
    
           //send directions
    
           context.bindings.message = {
               body : txtMessage,
               to: phone1 
           };
           context.bindings.message2 = {
               body : txtMessage,
               to: phone2 
           };
       }
    
    ​ 드디어!사용자에게 그들이 가려고 하는 식당의 주소를 보낼 때가 되었다.받은 POST 요청의 주체를 정의한 후에 메시지를 변수(txtMessage)로 표시하고 상하문에서 연락할 주체와 전화번호를 지정할 수 있습니다.바인딩메모

    정적 웹 어플리케이션 배포🚀

  • Azure 포털의 Azure에 정적 웹 응용 프로그램을 만들고 현재 작업 중인 GitHub repo의 주 지점에 작업 흐름을 추가합니다
  • 친구를 찾아서 새로운 식당을 시도하고 멀리서 식사를 하세요!
  • 내 버전을 시험적으로 사용하기 위한 링크가 있습니다: https://calm-moss-0d1a6c110.azurestaticapps.net/
    또한 제 코드를 보고 싶으시면 제 Github 환매 프로토콜입니다: https://github.com/a-padman/Dine2

    그럼 다음은요?🔮


    ​ Dine the Distance는 다른 기능을 위한 공간을 제공합니다.다음 단계는 모든 사용자에게 거리 추적기를 보여줌으로써 그들이 추천하는 식당마다 차를 몰아야 하는 거리를 가시화하는 것을 돕는다.
    ​ 그 전에...Dine the Distance가 있으면 당신과 당신의 친구는 더 이상 목적 없이 인터넷에서 근처의 식당을 방문하지 않고 다음에 당신이 먹고 싶을 때 이 기능이 완비된 인터넷 앱을 사용할 수 있습니다!

    특별히 언급하다🤗


    ​ 이 프로젝트는 마이크로소프트(Microsoft)가 공동으로 발기한Bit Project 서버가 없는 BitCamp의 일부분이다.나는 나의 지도 교수인 마리 호그에게 감사할 것이다. 그녀는 나의 모든 질문에 대답하여 이 프로젝트를 훌륭한 학습 체험으로 만들었다.또한 에밀리, 이브린, 줄리아가 우리의 팀 활동을 조율하고 비트 캠프 전체에 명확한 기대를 제시해 주셔서 감사합니다.
    마지막으로 사랑하는 제 친구 디비야 프랑시스가 이 앱의 영예를 얻었습니다.💖

    좋은 웹페이지 즐겨찾기