반응형
반응형

[python] PyCon KR 2017 프로그램 목록

 

PyCon Korea 

프로그램 목록

Best Practices & Patterns

Community

Computer Graphics, VFX, Physically-based simulation

Computer Network

Documentation

Environment and DevOps

Game Server

GUI Framework

IoT

MicroController

Python Core (language, stdlib, etc.)

Python Libraries

Raspberry Pi & Python

Science / Data

Service and Web Development

Reactive Programming

 

 

...

반응형
반응형

[python] Python vs Java @ PyCon Korea 2017

 

https://www.pycon.kr/2017/program/175

 

 

자바 개발자가 파이썬 개발을 배우면서 실무에 활용하고 집필을 하면서 겪었던 경험담 및 생각을 코드와 함께 풀어본다. 자바에 익숙한 사람이 파이썬을 배우고 있거나, 자바와 파이썬의 사이에서 고민을 했던 사람들에게 비교를 위한 기본 정보를 제공한다. 더 나아가 컴파일 언어와 스크립트 언어의 차이점, 개발 생산성을 측정할때 간과하는 컴파일 시간 및 순수 코딩 시간에 대한 통찰을 이끌 생각이다.

 

...

반응형
반응형

[python] PyCon kr 2017 -왜 연휴에 진행하는가? 

역시 뭔가 하려면 휴가는 반납해야하는걸까? 가고싶었는데 아깝다.

 

https://www.pycon.kr/2017/

 

Slack channel : 퍼블릭 파이콘 슬랙 채널

 

 

행사개요

이콘은 세계 각국의 파이썬 프로그래밍 언어 커뮤니티에서 주관하는 비영리 컨퍼런스입니다.

한국에서는 처음으로 열린 파이콘 한국 2014를 시작으로 파이콘 한국 준비위원회는 건강한 국내 파이썬 생태계에 지속적인 보탬이 되고자, 커뮤니티 멤버들의 자발적인 봉사로 운영되고 있습니다. 이번에 4년째 열리는 파이콘 한국 2017은, Back To The Basic "처음의 마음가짐으로" 라는 주제로 준비하였습니다. 더욱 다양한 참가자들과 함께 새로운 기술과 정보를 공유하고 서로 교류할 수 있는 행사가 되기를 희망합니다.

파이콘 한국 2017 티켓은 현장판매를 진행하지 않습니다. 꼭 파이콘 한국 공식홈페이지에서 구매해주세요.

  • 일정 : 2017년 8월 12일(토) ~ 15일(화)
    • 컨퍼런스 세션 : 8월 12일(토) ~ 8월 13일(일)
    • 스프린트와 튜토리얼 : 8월 14일(월) ~ 8월 15일(화)
  • 장소 : 강남구 코엑스 전시장
  • 인원 : 2,000명
  • 주최 : 파이콘 한국 준비위원회
  • 대상 : 국내외 파이썬 개발자 혹은 관심이 있는 분이라면 누구나
  • 발표 : 25분 또는 40분 길이의 발표

티켓 판매 일정

  • 얼리버드 판매 : 2017년 5월 16일 오후 1시 (UTC+9) ~ 매진 시 까지
  • 일반티켓 판매 : 2017년 6월 19일 오후 1시 (UTC+9)  ~ 매진 시 까지
  • 패트론티켓 판매 : 2017년 5월 16일 오후 1시 (UTC+9) ~ 매진 시 까지

퍼블릭 파이콘 슬랙

참가자분들을 위한 퍼블릭 슬랙을 오픈하였습니다.
더 재미있는 파이콘을 위해 퍼블릭 파이콘 슬랙 채널 을 이용해 보세요 :)

다양한 프로그램

  • 열린공간: 열린공간은 원하는 주제나 아이디어에 대해서 참가자들끼리 자유롭게 모여 이야기하는 프로그램입니다. '열린공간'은 어떤 주제라도 상관없이 사람들이 모여서 이야기할 수 있습니다.
  • 라이트닝토크: 라이트닝 토크는 그날의 프로그램이 모두 끝나고, 모든 참석자가 모여 5분 이내의 가벼운 이야기를 하는 행사입니다. 누구나 발표자가 될 수 있습니다.
  • 영코더: 미래의 파이썬 꿈나무들을 위한 교육 프로그램으로서 파이콘 티켓 구매자의 자녀, 조카, 이웃 등을 대상으로 합니다. 프로그래밍을 전혀 몰라도 처음부터 차근차근 흥미를 가질수 있게 해줍니다.
  • 아이돌봄: 파이콘 본 세션이 있는 8월 12일 토요일과 13일 일요일에 육아로 인해 파이콘에 참여가 어려운 분들을 위해  위해 `아이 돌봄`을 운영합니다.
  • 튜토리얼: 튜토리얼은 초보자들을 위해, 또는 새로운 것을 접하는 사람들을 위해 진행하는 교육 프로그램입니다.
  • 스프린트: 관심있는 오픈소스 프로젝트를 같은 장소에 모여 집중적으로 배우고 개발하는 자리입니다. 새로운 동료를 만나고, 오픈소스에서 얻을 수 있는 경험과 지식을 나눌 수 있습니다.

 

 

 

...

반응형
반응형

[Python] 파이썬으로 크롤러 만들기 - 박승규 @wapj - 이모콘 EMOCON 2016 F/W


게시일: 2016. 10. 19.

# 파이썬으로 크롤러 만들기 - 박승규 @wapj
requests와 BeautifulSoup을 이용해서 구글의 이미지를 긁어오는 내용을 만드는 과정을 발표합니다.


----------------------------

이 영상은 2016년 10월 7일~8일 양일간, 집에서 참여하는 이상한 컨퍼런스, 이모콘 2016 F/W에서 진행된 세션 영상입니다. 영상 목록은 아래 재생 목록에서 확인할 수 있습니다.

https://www.youtube.com/playlist?list...

----------------------------
이상한모임의 다양하고 재미있는 이야기를 빠르게 접하는 방법, 이상한모임의 Youtube 채널을 구독하세요!

https://www.youtube.com/channel/UCtzn...

이모콘 2016 F/W 페이지: http://emocon.weirdx.io/2016fw/
이상한모임 블로그: http://blog.weirdx.io
이상한모임 트위터: http://twitter.com/we_weirdmeetup
이상한모임 트위터: https://www.facebook.com/weweirdmeetup




...

반응형
반응형
파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문 - 웹 크롤링과 스크레이핑부터 머신러닝.딥러닝까지 체계적으로 배우기

파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문
국내도서
저자 : 쿠지라 히코우즈쿠에 / 윤인성역
출판 : 위키북스 2017.06.15
상세보기


머신러닝의 바탕이 되는 데이터를 수집하고, 수집된 데이터를 기반으로 머신러닝을 수행하는 방법을 설명한다. 인터넷에서 데이터를 어떻게 효율적으로 수집하는지 알아보고, 머신러닝을 원활하게 할 수 있게끔 데이터를 가공하는 방법을 살펴보며 더 나아가 가공된 데이터를 이용해 챗봇 제작, 규동 메뉴 이미지 판정, 얼굴 인식 등 머신러닝에 활용하는 과정까지 실질적인 파이썬 예제 코드로 소개하고 있다. 활용할 데이터만 가지고 있다면 자신이 원하는 것을 만들어낼 수 있다.

역자 동영상 강의


[목   차]

▣ 00장: 머신러닝을 위한 데이터 처리
0-1. 크롤링, 스크레이핑, 머신러닝
___인터넷의 빅데이터
___스크레이핑, 크롤링, 데이터 가공
___머신러닝에 사용할 수 있는 데이터의 구조

▣ 01장: 크롤링과 스크레이핑
1-1. 데이터 다운로드하기
___웹상의 정보를 추출하는 방법
___urllib.request를 이용한 다운로드
___웹에서 데이터 추출하기
___BeautifulSoup로 스크레이핑하기
1-2. BeautifulSoup로 스크레이핑하기
___네이버 금융에서 환율 정보 추출하기
___웹 브라우저로 HTML 구조 확인하기
1-3. CSS 선택자
___위키 문헌에 공개돼 있는 윤동주 작가의 작품 목록 가져오기 
___CSS 선택자 자세히 알아보기
___CSS 선택자로 추출 연습하기
___정규 표현식과 함께 조합하기
1-4. 링크에 있는 것을 한꺼번에 내려받기
___한꺼번에 다운받는 데 필요한 처리 내용
___상대 경로를 전개하는 방법
___재귀적으로 HTML 페이지를 처리하는 방법

▣ 02장: 고급 스크레이핑
2-1. 로그인이 필요한 사이트에서 다운받기
___HTTP 통신
___requests 사용해보기
2-2. 웹 브라우저를 이용한 스크레이핑
___웹 브라우저 원격 조작에 사용하는 Selenium
___웹 사이트를 이미지로 캡처해보기
___네이버에 로그인해서 구매한 물건 목록 가져오기
___Selenium으로 스크레이핑하는 방법
___자바스크립트 실행해보기
2-3. 웹 API로 데이터 추출하기
___웹 API
___웹 API를 제공하는 이유
___웹 API 사용해보기 - OpenWeatherMap의 날씨 정보 
___국내에서 사용할 수 있는 웹 API
2-4. cron을 이용한 정기적인 크롤링
___정기적인 크롤링
___매일 환율 정보 저장하기
___cron으로 매일 한 번 실행하기
___crontab 설정 방법

▣ 03장: 데이터 소스의 서식과 가공
3-1. 웹의 다양한 데이터 형식
___텍스트 데이터와 바이너리 데이터
___XML 분석
___JSON 분석
___YAML 분석
___CSV/TSV 분석
___엑셀 파일 분석
3-2. 데이터베이스
___데이터베이스
___데이터 저장에는 어떤 데이터베이스를 사용해야 할까?
___SQLite - 가볍게 파일 하나로 사용할 수 있는 데이터베이스
___MySQL 사용하기
___TinyDB 사용하기

▣ 04장: 머신러닝
4-1. 머신러닝이란?
___머신러닝 개요
___머신러닝의 종류
___머신러닝의 흐름
___머신러닝의 응용 분야
___초과 학습(초과 적합)
4-2. 머신러닝 첫걸음
___머신러닝 프레임워크 scikit-learn
___XOR 연산 학습해보기
___붓꽃의 품종 분류하기
4-3. 이미지 내부의 문자 인식
___손글씨 숫자 인식하기
___이미지 데이터 학습시키기
4-4. 외국어 문장 판별하기
___외국어 판정
___판정 방법
___샘플 데이터 수집
___언어 판별 프로그램
___웹 인터페이스 추가하기
4-5. 서포트 벡터 머신(SVM)
___SVM이란?
___SVM을 실제로 사용해보기
___SVM의 종류
4-6. 랜덤 포레스트
___랜덤 포레스트란?
___랜덤 포레스트 사용하기
4-7. 데이터를 검증하는 방법
___크로스 밸리데이션
___그리드 서치

▣ 05장: 딥러닝
5-1. 딥러닝 개요
___딥러닝
5-2. TensorFlow 설치하기
___TensorFlow
___설치 방법
___설치가 제대로 됐는지 확인하기
___TensorFlow로 간단한 계산해보기
5-3. Jupyter Notebook
___Jupyter Notebook 설치하고 실행하기
___새 노트 만들기
___데이터 시각화
___TensorFlow와 함께 사용하기
5-4. TensorFlow 기본
___TensorFlow 기본
___머신러닝 해보기
5-5. TensorBoard로 시각화하기
___TensorBoard의 사용법
5-6. TensorBoard로 딥러닝하기
___딥러닝의 구조
___딥러닝 해보기 - MNIST 손글씨 데이터
5-7. Keras로 다양한 딥러닝 해보기
___Keras
___Keras 설치
___Keras로 MNIST 테스트해보기
___Keras로 비만도 판정해보기
5-8. Pandas/NumPy 다루기
___Pandas/NumPy
___데이터 조작
___Pandas/Numpy 정리

▣ 06장: 텍스트 분석과 챗봇 만들기
6-1. 한국어 분석(형태소 분석)
___형태소 분석
___한국어 형태소 분석 라이브러리
___출현 빈도 분석
6-2. Word2Vec으로 문장을 벡터로 변환하기
___Word2Vec
___Gensim 설치
___Gensim의 Word2Vec으로 "토지"를 읽어보기
___위키피디아 한국어 버전을 사전으로 사용해보기
___위키피디아 데이터로 놀아보기
6-3. 베이즈 정리로 텍스트 분류하기
___텍스트 분류
___베이즈 정리
___나이브 베이즈 분류
___베이지안 필터 사용해보기
6-4. MLP로 텍스트 분류하기
___MLP로 텍스트 분류하기
6-5. 문장의 유사도를 N-gram으로 분석하기
___문장의 유사도 분석
___레벤슈타인 거리
___파이썬으로 레벤슈타인 거리를 계산하는 프로그램
___N-gram으로 유사도 구하기
6-6. 마르코프 체인과 LSTM으로 문장 생성하기
___마르코프 체인과 LSTM/RNN
___마르코프 체인이란?
___마르코프 체인 구현하기
___LSTM/RNN
6-7. 챗봇 만들기
___챗봇(회화 봇)
___챗봇의 구조

▣ 07장: 이미지와 딥러닝
7-1. 유사 이미지 검출하기
___간단한 형태 인식 - Average Hash
7-2. CNN으로 Caltech 101의 이미지 분류하기
___CNN으로 색상 있는 이미지 분류해보기
7-3. 규동 메뉴 이미지 판정하기
___규동을 판정할 수 있는 PC가 좋은 PC
___스크레이핑부터 시작하기
7-4. OpenCV로 얼굴 인식하기
___OpenCV
___얼굴을 인식하는 프로그램 만들어보기
___얼굴에 모자이크 걸기
7-5. 이미지 OCR - 연속된 문자 인식하기
___OpenCV로 텍스트 영역 확인하기
___문자 인식 데이터 만들기
___다양한 숫자 폰트 학습 시키기

▣ 부록: 개발 환경 구축
부록-1. Docker로 개발 환경 구축하기
___Docker란?
___Docker 설치
___윈도우 10 이하에서 Docker Toolbox 설치하기
___macOS에서 Docker for Mac 설치하기
부록-2. 파이썬 + Anaconda 환경 준비
___파이썬 + Anaconda 이미지 다운로드


...



반응형
반응형

[ChatBot] 챗봇 시작해보기

챗봇 시작해보기

  1. 1. 챗봇 시작해보기 파이썬과 노드로 만들어 보는 챗봇 (Slack, facebook..) ABCD, 한성일
  2. 2. 0. 챗봇이란?
  3. 3. 챗봇이란? 고객의 요청을 대신 응답해주는 채팅로봇 인공지능 빅데이터 자연어처리 프로그래밍 나이가 어떻게 되 시나요? 텍스트 음성 … 묻지 마세요.. 응답요청 Chatbot 머신러닝
  4. 4. 챗봇 예 심심이 페이스북 챗봇
  5. 5. 어디에 쓸까요? 가장 쉽게 떠오르는 곳은 콜 센터입니다.
  6. 6. 또 어디가 있을까요? 물건주문, 호텔예약, 비서…
  7. 7. 생각보다 간단할지 모릅니다.
  8. 8. 1. 챗봇 플로우
  9. 9. 챗봇 프레임웍 http://kitt.ai/ https://dev.botframework.com/
  10. 10. 챗봇 플랫폼 라인 슬렉 텔레그램 페이스북
  11. 11. 일반적인 챗봇 플로우 http://www.lds.com/coepost/enabling-a-smart-user-experience-using-chatbots/
  12. 12. 슬랙과 페이스북 API 를 이용해서 챗봇을 만들어보겠습니다. 간단한..
  13. 13. 2. 파이썬으로 슬렉챗봇 만들기
  14. 14. 선작업 1. 파이썬 설치 https://realpython.com/blog/python/getting-started-with-the-slack-api-using-python-and-flask/ 참고 2. 슬랙 커뮤니티 생성
  15. 15. VIRTUAL ENV 설정 $ mkdir abcd-python-slack-bot $ virtualenv venv $ source venv/bin/activate (venv)$ pip install slackclient==1.0.0
  16. 16. 토큰생성 https://api.slack.com/web
  17. 17. 토큰생성 https://api.slack.com/docs/oauth-test-tokens
  18. 18. 토큰을 환경 변수로 지정 (venv)$ export SLACK_TOKEN=‘생성된 토큰'
  19. 19. ngrok 을 이용 외부 오픈 SSL 주소 생성 https://ngrok.com/download (venv)$ ./ngrok http 5000 로컬 서버를 SSL 로 외부 오픈..
  20. 20. WEBHOOK https://api.slack.com/outgoing-webhooks
  21. 21. WEBHOOK https://abcds.slack.com/apps/new/A0F7VRG6Q-outgoing-webhooks
  22. 22. INTEGRATION SETTINGS https://abcds.slack.com/services/B37GEBQBZ?added=1 ngrok 으로 생성된 주소 + /webhook 사용될 채널 웹훅 토큰
  23. 23. WEBHOOK (venv)$ export SLACK_WEBHOOK_SECRET=‘생성된 웹훅 토큰'
  24. 24. FLASK 설치 (venv)$ pip install flask
  25. 25. RECEIVE.PY # -*- coding: utf-8 -*- import os from flask import Flask, request, Response from slackclient import SlackClient app = Flask(__name__) SLACK_WEBHOOK_SECRET = os.environ.get('SLACK_WEBHOOK_SECRET') SLACK_TOKEN = os.environ.get('SLACK_TOKEN', None) slack_client = SlackClient(SLACK_TOKEN) def send_message(channel_id, message): slack_client.api_call( "chat.postMessage", channel=channel_id, text=message, username='abcdBot', icon_emoji=':monkey_face:' ) @app.route('/webhook', methods=['POST']) def inbound(): print("get " + request.form.get('token')) print("username " + request.form.get('user_name')) username = request.form.get('user_name') if request.form.get('token') == SLACK_WEBHOOK_SECRET and username != 'slackbot': channel_name = request.form.get('channel_name') channel_id = request.form.get('channel_id') username = request.form.get('user_name') text = request.form.get('text') inbound_message = username + " in " + channel_name + " says: " + text send_message(channel_id, unicode("따라쟁이 ", 'utf-8') + " " + text) print(inbound_message) return Response(), 200 @app.route('/', methods=['GET']) def test(): return Response('It works!') if __name__ == "__main__": app.run(debug=True) receive.py
  26. 26. RECEIVE.PY (venv)$ python receive.py
  27. 27. 구동화면
  28. 28. 실제 서버를 설정해서 포팅해봅시다.
  29. 29. 3. 노드로 페이스북 챗봇 만들기 (HEROKU)
  30. 30. 선작업 http://x-team.com/2016/04/how-to-get-started-with-facebook-messenger-bots/ nodejs 설치 참고 https://nodejs.org/ko/download/
  31. 31. 선작업 heroku 가입이 되어있어야 함 https://heroku.com/ https://devcenter.heroku.com/articles/getting-started-with-nodejs#set-up heroku CLI 가 설치되어있어야 함
  32. 32. 프로젝트 생성 $ mkdir abcd-node-bot $ cd abcd-node-bot/ $ npm init $ npm install express body-parser request --save { "name": "testbot", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1", "start": "node index.js" }, "author": "", "license": "ISC", "dependencies": { "body-parser": "^1.15.2", "express": "^4.14.0", "request": "^2.79.0" } }
  33. 33. express 설치 $ npm install express body-parser request --save
  34. 34. INDEX.JS 생성 index.js 생성 var express = require('express'); var bodyParser = require('body-parser'); var request = require('request'); var app = express(); app.use(bodyParser.urlencoded({extended: false})); app.use(bodyParser.json()); app.listen((process.env.PORT || 3000)); // Server frontpage app.get('/', function (req, res) {     res.send('잘돈다.'); }); // Facebook Webhook app.get('/webhook', function (req, res) { console.log(req.query['hub.verify_token']); if (req.query['hub.verify_token'] === 'abcd_verify_token') { // webhook 설정에 입력된 토큰 res.send(req.query['hub.challenge']); } else { res.send('Invalid verify token'); } }); node index.js
  35. 35. HEROKU 생성 $ heroku login
  36. 36. 로컬 GIT 설정 $ git init $ heroku create $ git add . $ git commit -m ‘ABCD 노드 봇 첫번째 커밋' $ git push heroku master .gitignore node_modules
  37. 37. 작동확인 https://warm-spire-76279.herokuapp.com/
  38. 38. 페이스북 페이지 만들기 https://www.facebook.com/pages/create/
  39. 39. 페이지 생성 완료
  40. 40. 앱생성 https://developers.facebook.com/quickstarts/ 기본설정으로 앱생성
  41. 41. 제품추가
  42. 42. 토큰생성
  43. 43. 토큰생성
  44. 44. WEB HOOK 설정 https://developers.facebook.com/ heroku 경로
  45. 45. WEB HOOK 설정 페이지를 선택해주세요!
  46. 46. WEBHOOK 설정
  47. 47. PAGE_ACCESS_TOKEN 설정 PAGE_ACCESS_TOKEN
  48. 48. 토큰 유효성 확인 https://warm-spire-76279.herokuapp.com/webhook? hub.verify_token=abcd_verify_token
  49. 49. 따라하기 봇 테스트
  50. 50. KITTEN https://placekitten.com/ kitten 300 200
  51. 51. 따라하기 & 키튼 봇 소스 1 var express = require('express'); var bodyParser = require('body-parser'); var request = require('request'); var app = express(); app.use(bodyParser.urlencoded({extended: false})); app.use(bodyParser.json()); app.listen((process.env.PORT || 3000)); // Server frontpage app.get('/', function (req, res) { res.send('This is TestBot Server'); }); // Facebook Webhook app.get('/webhook', function (req, res) { console.log(req.query['hub.verify_token']); if (req.query['hub.verify_token'] === 'abcd_verify_token') { // webhook 설정에 입력된 토큰 res.send(req.query['hub.challenge']); } else { res.send('Invalid verify token'); } });
  52. 52. 따라하기 & 키튼 봇 소스 2 // handler receiving messages app.post('/webhook', function (req, res) { var events = req.body.entry[0].messaging; for (i = 0; i < events.length; i++) { var event = events[i]; if (event.message && event.message.text) { if (!kittenMessage(event.sender.id, event.message.text)) { sendMessage(event.sender.id, {text: event.message.text}); } } else if (event.postback) { console.log("Postback received: " + JSON.stringify(event.postback)); } } res.sendStatus(200); }); // generic function sending messages function sendMessage(recipientId, message) { request({ url: 'https://graph.facebook.com/v2.6/me/messages', qs: {access_token: process.env.PAGE_ACCESS_TOKEN}, method: 'POST', json: { recipient: {id: recipientId}, message: message, } }, function(error, response, body) { if (error) { console.log('Error sending message: ', error); } else if (response.body.error) { console.log('Error: ', response.body.error); } }); };
  53. 53. 따라하기 & 키튼 봇 소스 3 // send rich message with kitten function kittenMessage(recipientId, text) { text = text || ""; var values = text.split(' '); if (values.length === 3 && values[0] === 'kitten') { if (Number(values[1]) > 0 && Number(values[2]) > 0) { var imageUrl = "https://placekitten.com/" + Number(values[1]) + "/" + Number(values[2]); message = { "attachment": { "type": "template", "payload": { "template_type": "generic", "elements": [{ "title": "Kitten", "subtitle": "Cute kitten picture", "image_url": imageUrl , "buttons": [{ "type": "web_url", "url": imageUrl, "title": "Show kitten" }, { "type": "postback", "title": "I like this", "payload": "User " + recipientId + " likes kitten " + imageUrl, }] }] } } }; sendMessage(recipientId, message); return true; } } return false; };
  54. 54. 4. 조금 더해보기
  55. 55. 더하기봇
  56. 56. 더하기 봇 소스 #1 var express = require('express'); var bodyParser = require('body-parser'); var request = require('request'); var app = express(); app.use(bodyParser.urlencoded({extended: false})); app.use(bodyParser.json()); app.listen((process.env.PORT || 3000)); // Server frontpage app.get('/', function (req, res) { res.send('This is TestBot Server'); }); app.get('/forecast', function (req, res) { forecast.get([35.9335, 139.6181], function(err, weather) { if(err) return console.dir(err); console.dir(weather); console.dir(weather.latitude); console.log("weather.latitude " + weather.latitude); console.log("오늘 " + weather.timezone + "의 날씨는 " + weather.currently.summary + "입니다. "); }); res.send('forecast'); });
  57. 57. 더하기 봇 소스 #2 // Facebook Webhook app.get('/webhook', function (req, res) { if (req.query['hub.verify_token'] === 'abcd_verify_token') { res.send(req.query['hub.challenge']); } else { res.send('Invalid verify token'); } }); // handler receiving messages app.post('/webhook', function (req, res) { var events = req.body.entry[0].messaging; for (i = 0; i < events.length; i++) { var event = events[i]; if (event.message && event.message.text) { addMessage(event.sender.id, event.message.text); } } res.sendStatus(200); });
  58. 58. 더하기 봇 소스 #3 // generic function sending messages function sendMessage(recipientId, message) { request({ url: 'https://graph.facebook.com/v2.6/me/messages', qs: {access_token: process.env.PAGE_ACCESS_TOKEN}, method: 'POST', json: { recipient: {id: recipientId}, message: message, } }, function(error, response, body) { if (error) { console.log('Error sending message: ', error); } else if (response.body.error) { console.log('Error: ', response.body.error); } }); }; function addMessage(recipientId, text) { text = text || ""; var values = text.split(' '); if (values.length === 3 && values[0] === 'add') { if (Number(values[1]) > 0 && Number(values[2]) > 0) { addText = values[1] + " + " + values[2] + " = " + (Number(values[1]) + Number(values[2])); message = {text: addText}; sendMessage(recipientId, message); } } };
  59. 59. FORECAST 설치 $ npm install --save forecast
  60. 60. 날씨봇 https://darksky.net/dev/
  61. 61. FORECAST KEY
  62. 62. 날씨앱 테스트
  63. 63. 날씨 봇 소스 #1 var express = require('express'); var bodyParser = require('body-parser'); var request = require('request'); var app = express(); app.use(bodyParser.urlencoded({extended: false})); app.use(bodyParser.json()); app.listen((process.env.PORT || 3000)); var Forecast = require('forecast'); // Initialize var forecast = new Forecast({ service: 'darksky', key: ‘your-api-key‘, units: 'celcius', cache: true, // Cache API requests ttl: { minutes: 27, seconds: 45 } });
  64. 64. 날씨 봇 소스 #2 // Server frontpage app.get('/', function (req, res) { res.send('This is TestBot Server'); }); app.get('/forecast', function (req, res) { forecast.get([35.9335, 139.6181], function(err, weather) { if(err) return console.dir(err); console.dir(weather); }); res.send('forecast'); }); // Facebook Webhook app.get('/webhook', function (req, res) { if (req.query['hub.verify_token'] === 'abcd_verify_token') { res.send(req.query['hub.challenge']); } else { res.send('Invalid verify token'); } });
  65. 65. 날씨 봇 소스 #3 // handler receiving messages app.post('/webhook', function (req, res) { var events = req.body.entry[0].messaging; for (i = 0; i < events.length; i++) { var event = events[i]; if (event.message && event.message.text) { weatherMessage(event.sender.id, event.message.text); } } res.sendStatus(200); }); // generic function sending messages function sendMessage(recipientId, message) { request({ url: 'https://graph.facebook.com/v2.6/me/messages', qs: {access_token: process.env.PAGE_ACCESS_TOKEN}, method: 'POST', json: { recipient: {id: recipientId}, message: message, } }, function(error, response, body) { if (error) { console.log('Error sending message: ', error); } else if (response.body.error) { console.log('Error: ', response.body.error); } }); };
  66. 66. 날씨 봇 소스 #4 function weatherMessage(recipientId, text){ text = text || ""; var values = text.split(' '); if (values[0] === '날씨') { forecast.get([35.9335, 139.6181], function(err, weather) { console.log(weather); weatherText = "오늘 " + weather.timezone + "의 날씨는 " + weather.currently.summary + "입니다. "; message = {text: weatherText}; sendMessage(recipientId, message); }); } }
  67. 67. 더하기와 날씨봇을 확장해 보세요.
  68. 68. 또 어떤걸 해보고 싶으신가요? 머신러닝, 자연어처리, 음성인식…
  69. 69. 파이썬 https://github.com/snowkiwi/slack-python-bot-tutorial 소스는 이곳을 참고하세요. 노드 https://github.com/snowkiwi/facebook-node-bot
  70. 70. Q & A
  71. 71. 수고하셨습니다. :) ABCD http://abcds.kr 


...

반응형

+ Recent posts