Revue - Sendy 동기화: Sendy 통화

15309 단어 nodeapiwebdev
이제 Revue 데이터에 액세스할 수 있으므로 Sendy에서 처리를 시작할 수 있습니다.

이 글에서는 previous article에서 생성한 두 개의 데이터 세트(미가입 사용자와 가입 사용자)를 살펴보고 Sendy에 추가/제거하고자 합니다.

나와 함께 코딩하고 싶다면 오늘은 this is the starting point code.

Node.js에서 Sendy API 호출하기



이전 기사에서 우리는 이미 프로젝트와 종속 항목을 설정하여 이러한 항목을 이 항목에 활용했습니다.

그러나 Sendy's API via our API platform을 쿼리했을 때 다음 키가 필요하다는 것을 알게 되었습니다.
  • Sendy API 키(실제 API 키)
  • Sendy list ID(우리가 구독하는 목록)

  • 검색한 후에는 .env 파일에 추가하십시오.

    REVUE_API_TOKEN={YOUR_TOKEN}
    SENDY_API_KEY={YOUR_TOKEN}
    SENDY_LIST={LIST_ID}
    


    우리가 할 수 있기를 원하는 첫 번째 일은 사용자 구독을 취소하는 것입니다.

    예를 들어 Revue에서 가져온 하나의 항목부터 시작하겠습니다.

    [
      {
        "id": 999999,
        "list_id": 305882,
        "email": "[email protected]",
        "first_name": null,
        "last_name": null,
        "last_changed": "2022-01-08T04:30:04.492Z"
      }
    ]
    


    여기서는 이메일 주소만 있으면 됩니다.

    Sendy API를 호출하기 위해 POST를 수행하려는 데이터 속성을 설정하기 위해 양식 데이터를 사용해야 한다는 것도 배웠습니다.

    배열을 받아 사용할 수 있는 양식 데이터로 바꾸는 도우미 함수를 만들어 봅시다.

    Note: You can use the form-data package, but I prefer native solutions as seen below



    const convertToFormData = (data) => {
      const formData = new URLSearchParams();
      Object.keys(data).forEach((key) => {
        formData.set(key, data[key]);
      });
      return formData;
    };
    


    이 함수는 개체에서 키를 가져오고 URL 검색 매개변수로 설정하여 개체를 변환합니다.
    양식 데이터로 사용할 수 있습니다.

    이 기능을 다음과 같이 사용할 수 있습니다.

    const data = {
      api_key: 'test',
      key1: 'testing',
    };
    console.log(convertToFormData(data));
    
    // URLSearchParams { 'api_key' => 'test', 'key1' => 'testing' }
    


    그런 다음 계속해서 Sendy API를 호출할 수 있는 함수를 정의할 수 있습니다.
    이 함수를 다시 전역화하여 쉽게 재사용할 수 있습니다.

    const callSendyAPI = async (endpoint, body) => {
      const response = await fetch(`https://sendy.daily-dev-tips.com/${endpoint}`, {
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
        },
        method: 'POST',
        body,
      }).then((res) => res.status);
      return response;
    };
    


    Revue와 비교할 때 가장 큰 차이점은 POST 방식을 사용한다는 것입니다.
    또한 양식 데이터를 수락하고 전달하도록 콘텐츠 유형을 설정합니다.

    이 함수를 호출하기 전에 항상 Sendy로 보내야 하는 데이터로 기본 개체를 만들 수 있습니다. (API 키 및 목록 ID)

    const sendyDefaults = {
      api_key: process.env.SENDY_API_KEY,
      list: process.env.SENDY_LIST,
    };
    


    함수를 호출하기 위해 기본 함수에서 호출할 수 있습니다.

    (async () => {
      const unsubscribeSendy = await callSendyAPI(
        '/unsubscribe',
        convertToFormData({
          ...sendyDefaults,
          email: '[email protected]',
        })
      );
      console.log(unsubscribeSendy);
    })();
    


    보시다시피 spread operator을 사용하여 기본값을 사용하고 여기에 email 속성을 추가합니다.

    응답이 일반 텍스트이므로 이 코드를 실행할 때만 상태 코드를 얻습니다.

    하지만 내 Sendy 설치를 보면 동작이 진행되는 것을 볼 수 있습니다!



    루핑 Revue 구독하지 않은 사용자



    구독 취소가 작동하는 것을 알고 있으므로 이제 두 가지를 결합하고 구독 취소 리뷰를 반복하여 이 요청을 Sendy에 보낼 수 있습니다.

    (async () => {
      const revueUnsubscribed = await callRevueAPI('subscribers/unsubscribed');
    
      for (const unsubscriber of revueUnsubscribed) {
        const unsubscribeSendy = await callSendyAPI(
          '/unsubscribe',
          convertToFormData({
            ...sendyDefaults,
            email: unsubscriber.email,
          })
        );
        console.log(unsubscribeSendy);
      }
    })();
    


    이 코드는 구독하지 않은 Revue 사용자를 반복하고 Sendy에서 구독을 취소합니다.

    구독 사용자



    우리가 구축하고 있는 통합의 주요 이점은 사람들이 Revue를 통해 가입하고 Sendy 뉴스레터에 자동으로 추가될 수 있다는 것입니다.

    이를 달성하기 위해 구독 취소와 유사한 접근 방식을 사용할 수 있지만 단순히 다른 필드를 전달할 수 있습니다.

    const subscribeSendy = await callSendyAPI(
      '/subscribe',
      convertToFormData({
        ...sendyDefaults,
        email: '[email protected]',
        silent: true,
      })
    );
    console.log(subscribeSendy);
    


    실행 시 200 코드를 얻어야 합니다. Sendy에서 보면 사용자가 구독 중이어야 합니다.



    Looping Revue 구독 사용자



    Revue에서 구독한 모든 사람들을 반복해서 Sendy에 추가해 보겠습니다.

    Note: This script will handle try and subscribe people every time. We currently don't check if they are already in the system.



    (async () => {
      const revueSubscribed = await callRevueAPI('subscribers');
      for (const subscriber of revueSubscribed) {
        const subscribeSendy = await callSendyAPI(
          '/subscribe',
          convertToFormData({
            ...sendyDefaults,
            email: subscriber.email,
            silent: true,
          })
        );
        console.log(subscribeSendy);
      }
    })();
    


    그리고 그게 다야. 이 코드를 실행하면 모든 Revue 구독자가 Sendy에 추가됩니다.

    Note: You might want to wait and do an import into Revue first to sync the existing subscribers both ways.



    GitHub에서 이 문서의 코드를 찾을 수 있습니다.

    읽어주셔서 감사합니다. 연결합시다!



    제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook에 연결하거나

    좋은 웹페이지 즐겨찾기