Revue - Sendy 동기화: Sendy 통화
이 글에서는 previous article에서 생성한 두 개의 데이터 세트(미가입 사용자와 가입 사용자)를 살펴보고 Sendy에 추가/제거하고자 합니다.
나와 함께 코딩하고 싶다면 오늘은 this is the starting point code.
Node.js에서 Sendy API 호출하기
이전 기사에서 우리는 이미 프로젝트와 종속 항목을 설정하여 이러한 항목을 이 항목에 활용했습니다.
그러나 Sendy's API via our API platform을 쿼리했을 때 다음 키가 필요하다는 것을 알게 되었습니다.
검색한 후에는
.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-datapackage, 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에 연결하거나
Reference
이 문제에 관하여(Revue - Sendy 동기화: Sendy 통화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dailydevtips1/revue-sendy-sync-sendy-calls-p77텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)