1편 세팅편 : https://www.clien.net/service/board/lecture/17960697CLIEN
2편 VueJS적용 : https://www.clien.net/service/board/lecture/17962453CLIEN
3편 프론트작업1 : https://www.clien.net/service/board/lecture/17964735CLIEN
4편 프론트작업2 : https://www.clien.net/service/board/lecture/17966827CLIEN
5편 테이블작업 : https://www.clien.net/service/board/lecture/17969157CLIEN
저번편에서 테이블에 가장 숫자가 높은 회차가 몇인지 알아냈으니 그것을 근거로
동행복권의 RestAPI호출을 하여 값을 가져오는 것을 해보도록 하죠.
1. 로직구상
저희는 인터넷에서 검색하면 몇회차가 가장 최신 로또 회찬지 알수있지만
프로그램은 그걸 모르죠?
그러니까 우선 로직이 우리가 가진 테이블에 가장 큰숫자(그래야 최신회차 일테니까요)를 꺼낸뒤에
그 숫자에서 1을 더해서 요청해 보도록 하죠.
저번 편에서 보셨듯이 저희 테이블에 회차가 아예 없으면 0이 나올테니까 그회차에 1을 더하면 1회부터 요청을 하게 될거에요.
5편 마지막 부분에 테이블에서 가져온 데이터를 var_dump 로 봤을때 가져온 숫자는 string(문자열) 으로 되어있어요.
숫자로 바꿔놔야 우리가 산수를 할수 있겠죠.
php는 형변환 자동으로 안되니까 저렇게 미리미리 타입을 변환해 놔야 원하는 대로 로직을 짤수 있대영
그런다음 3편 프론트 작업할때 잠깐 로또 RestAPI를 보여드린적이 있어요.
그 주소를 호출하여 php로 어떻게 받아올지 GPT한테 슬쩍 물어보죠
정말 대단합니다…
고민할 필요도 없군요.
지금 예시로 보여드리는 거지만 사실 저기서 "https호출이 되는거냐" 같은 추가질문을 하면 그것도 잘 대답해 준답니다.
개발 공부할때도 나름 유용할거 같아요 ㄷㄷ
2. 동행복권 에서 데이터 요청
그럼 돌아가는 코드를 아래와 같이 짜도록 하고요.
제대로 가져왔는지 보려고 밑에 var_dump로 json에서 php에서 쓸수있는 값으로 변환된 데이터를 한번 웹에 출력해서 볼거에요.
데이터가 아직 하나도 없는 상태라고 가정하면 1회차를 가져올테고 출력되는 모양은 이것과 비슷할거에요
그리고 저는 이미 전주회차 까지 다 들어가 있으니까 다음과 같이 나옵니다.
실패했을 경우 어떤상태로 오는지 알아보는것도 의미가 있는게 그래야 DB에 기록을 할때 어떤조건에서 안할지 알수 있으니까요.
좀 허무하게 들릴지 모르지만 이렇게 해서 데이터를 가져온 겁니다.
이제 저 $jsondata 에 있는 값들을 갖다가 써서 테이블에 저장하면 되는겁니다.
3. DB Insert
그렇게 가져온 다음 데이터를 insert 하는 쿼리를 만들도록 해요.
혹시 비개발자 분중에 이거를 보신다면 쿼리를 짜는건 코드에서 실행시켜서 매번 확인하긴 힘드니까
phpMyAdmin이나 다른 sqldeveloper혹은 DBeaver 같은 DB IDE프로그램에서 실제로 코드를 작성해보고
예제를 실행시켜서 확인한다음 코드로 옮기시는게 좋아요.
코드를 짤때는 자기가 짜는 각각의 것들이 문제가 없는지 하나씩 점검하면서 돌려보고 확인해보는게 좋아요.
지금 여기서는 제가 많이 생략했지만 저도 중간에 코드가 잘 짜졌나 echo 나 var_dump로 꼭 값을 확인하면서 진행한답니다.
그냥 말로 간단하게 떼우면
- restAPI요청이 실패하지 않았다면
- json데이터를 우리가 쓸수있도록 바꾸고
- 거기서 나온 데이터가 fail 이 아니라면
- 받은 자료를 조립해서 sql 문장을 만들고
- DB에 요청해서 자료를 넣는겁니다~
특이점은 별로 없습니다만 눈에 띄는건 문자열을 더할때 javascript와는 달리 점(.) 을 사용하여 붙인다는거 정도가 되려나요.
여기서도 그누보드가 준 함수셋을 사용하는데 sql_query 는 그누보드에서 insert 나 update 혹은 delete 같이 조회결과가 나오지는 않지만 실행시켜야 하는 구문에서 사용됩니다.
성공하면 적용된 행의 카운트가 나옵니다.
그걸 받아서 성공여부를 확인할수 있죠.
4. 자동화
아래와 같이 진행하면 testRestAPI를 할때마다 한개의 로또회차가 저장이 될겁니다.
그럼 현재회차 까지 저장하려면 어떻게 하면 되죠?
1000번 이상을 돌리면 되긴 합니다…. 뭐 매크로로 만드셔도 되는데 … 그건좀 그러니까
우리는 우아하게 php로직에서 지금까지 한거를 최신회차가 나올때까지 계속 돌리도록 로직을 짜볼겁니다.
처음 로직을 짤때 DB에서 높은값을 얻어와서 가져온 데이터가 fail 이 아닌경우 넣는것까지 했으니까
저 부분을 while로 감싸서 반복하게 하고 restapi에서 fail 이 나올때까지만 돌리면 될거 같습니다.
코드를 다음과 같이 수정했습니다.
실행시키면 차례대로 insert 성공 메시지가 주르륵 나오면서 최신회차 상태라고 나오면서 종료라 될 것입니다.
5. 요약 및 첨언
2회에 걸쳐서 나눔 로또 데이터를 내 사이트로 가져오는 일련의 과정을 코딩을 했습니다.
한마디로 내 DB테이블에 최신자료를 보고 동행복권에서 요청해서 받아오는 로직을 짠거죠.
다음편에서는 드디어 프론트에서 백엔드로 최신회차를 요청해서 가져올수 있겠네용
사실 처음 php명을 쓰면서 최신회차 요구를 돌려주는 restapi 로 먼저 만들려 했는데
데이터가 없는 상태에서는 좀 재미가 없을거 같아 데이터 작업을 먼저 했습니다.
한가지 해결해셔야 하는건 지금만든 php를 저같은경우는 나스에서 돌릴 수 있어서
시놀로지의 예약작업으로 저녁 9시 이후에 한번 자동으로 실행시키는데..
Cafe24 같은 호스팅 업체에서는 그렇게 스케쥴로 자동으로 돌아가는 로직을 허용하지 않는것으로 알고있습니다.(컴퓨팅 자원 낭비문제)
수동으로 로또 결과가 나온후에 저걸 사이트 관리자가 실행시켜 주던지
아니면 나스가 있다면 해당 주소를 예약해서 호출하는 쉘스크립트를 짜던지
혹은 사용자가 처음 사이트를 들어올때 저걸 실행 시키도록 하고 실행하면 쿠키에 저장해서 하루정도는 안하는 방법등이 있는데..
사실 답은 없습니다.… 저도 해봐야 아는거라(저는 시놀로지 스케쥴로 걸어놨기 때문에..)
이부분은 시스템에서 허용 안하는걸 어떻게 우회하냐의 문제라 본인이 사용할수 있는 장비나 상황에 따라 다를거 같습니다.
여튼 다음회에서 뵐게요~
댓글로 모르겠는걸 써주시면 제가 할수있는 범위에서는 이 전체로직 설명이 다끝나면
한두회차를 빌어서 궁금증을 해결해 드리겠습니다
모두들 긴글 보시느라 수고하셨어요~