-
Django를 이용한 Rest API 서버 구축
Django를 이용해 Restful한 API 서버를 구축하는 방법을 익혀본다. Ubuntu 16.04-64-server Python 3.5.2 Django 2.0.5 django-rest-swagger 2.2.0 환경 세팅 파이썬 버전을 확인해 준다. 파이썬 3.x 버전이 없다면 설치해준다. $ python --version $ python3 --version 이어서 가상환경을 세팅해주기 위해 virtualenv를 설치해준다. $ apt-get install virtualenv virtualenv 설치가 완료되었다면 학습을 위한 가상환경을 생성한다. $ virtualenv -p python3 rest_env 가상환경이 생성완료 되면, 가상환경을 activate 시켜준다. 정상적으로 가동되었다면 터미널 입력창 앞에 (rest_env)가 붙어있을 것이다. $ source ~/rest_env/bin/activate 이어서 필요한 Django...
-
Python BeautifulSoup 한글 인코딩
BeautifulSoup에서 갑자기 한글이 깨지는 오류 발생 오늘 오전 크롤링한 메뉴부터 한글이 갑자기 깨지는 오류가 발생했다. urllib에서 html문서를 읽어오는 과정에서 한글이 깨진 것을 확인했고 다음과 같은 코드를 삽입하여 문제를 해결할 수 있었다. html = urlopen(url).read().decode('cp949', 'ignore')
-
카카오톡 자동응답 API로 학식봇 구현
카카오톡의 옐로아이디 자동응답 API로 동국대학교 학생식당의 메뉴를 알려주는 봇을 구현해보았다. Python3와 Django를 이용했으며, Mac OS X를 기반으로 작성했다. 구현된 모습 위의 사진과 같이 동국대학식봇을 친구로 추가하고, 대화창에서 해당 식당의 버튼을 클릭하면 메뉴를 출력해주는 방식으로 구현했다. 시작 및 키보드 구현하기 우선 시작을 하기 위해선 옐로아이디 등록과 카카오 앱 등록이 필요한데, 이는 다른 블로그에도 많이 나와있으므로 생략한다. 카카오 옐로아이디 앱을 등록하고, API형 자동응답을 하기 위해서는 일단 기본적으로 카카오 API중에서 https://your_server_url/keyboard/요청에 알맞게 반응하도록 해야한다. 이제부터 Python과 Django를 이용해...
-
Django Class-based View
Django에는 Class-based view라는 강력한 기능이 있는데, 이를 공부 하기 위해 Documentation을 번역해본다. Class-based view는 view를 Python의 function 대신 object의 형태로 상속받을 수 있는 방법을 제시한다. 이것은 function-based view를 대체하는 것이 아니지만, function-based view와 비교했을 때 확실한 차이점과 이점이 존재한다. 특정 HTTP 메소드(GET,POST,etc)와 관련된 코드들을 조건을 이용해 분기처리 하는 대신 메소드의 형태로 사용할 수 있다. Mixin(다중상속)과 같은 객체지향 테크닉을 활용해 재사용가능한 컴포넌트의 형태로 코드를 짤 수 있다. Generic views, class-based views, class-based generic view의 관계와 역사...
-
동국대학교 학식 알림이봇
스크래핑과 페이스북 API를 공부할 겸 동국대학교 학식을 스크랩 해와서 페이스북에 포스팅하는 프로그램을 만들었다. 처음엔 텍스트 형식으로 스크래핑 해온 값을 포스팅하려고 했지만, 단순 텍스트만 나오니 너무 단조로워서 테이블을 HTML형식으로 만들어서 출력하고, 그것을 서버상의 가상 디스플레이로 열어 스크린샷을 캡쳐하고, 그 스크린샷을 업로드 하는 방식으로 구동했다. 만든지 일주일 정도 되었는데 좋아요수가 130개 남짓 된다. 홍보를 하면 더 늘어날 것 같다.
-
Python Script를 Crontab으로 실행하기
학식을 스크래핑해서 페이스북에 포스팅하는 봇을 제작중인데, 서버에 올려놓고 Crontab을 활용해 자동으로 실행되게 하고자 한다. (우분투, Python3.4, Pyenv-virtualenv환경을 기준으로 작성됨) Python 파일 세팅 우선 실행하고자 하는 파이썬 파일 제일 윗 칸에 파이썬 인터프리터의 경로를 입력해야 한다. 우분투 기본 환경의 파이썬을 사용하고 있다면 #!/usr/bin/python을 입력하면 된다. 나의 경우는 pyenv-virtualenv환경에서 python3.4.1을 사용하고 있으므로 경로를 찾아서 스크립트 제일 위에 입력해주면 된다. python >>> import sys >>> sys.path ['', '/root/.pyenv/versions/3.4.1/lib/python34.zip', '/root/.pyenv/versions/3.4.1/lib/python3.4' ...] >>> exit() bash창에서 python을 입력하면 파이썬 스크립트 창으로...
-
Python Facebook SDK를 활용해 페이지에 글 쓰기
Python과 Facebook API를 사용해 글을 써 주는 프로그램을 제작하고자 한다. 일단은 기초적인 API를 사용해 페이지에 ‘테스트’라고 적힌 포스팅만 게시하는 프로그램을 만들어 보고, 추후에 원래 목적이었던 학식을 파싱해서 올리는 것으로 완성하려고 한다. Python 3.4.1, Mac OS X 기반으로 쓰인 글임 페이지 만들기 개인 담벼락이나 그룹이 아닌 페이지에 글을 포스팅하기를 원하기 때문에 페이지를 만들어야 한다. 임의의 페이지를 만들고 정보 창에서 Facebook 페이지 ID 를 복사하여 메모해둔다. 페이스북 앱 만들기 Facebook Developer 사이트로 이동하여 개발자로 등록을 한다. Facebook...
-
Beautifulsoup로 학식 테이블 스크래핑하기
처음 파이썬에 관심을 가지게 된 이유는 크롤러와 스크래퍼 때문이었다. 이번에는 BeutifulSoup를 활용해 동국대학교 학식 식단표를 스크래핑해본다. (Mac OS X, Python 3.4.1 환경에서 실행된 내용임) BeatifulSoup 설치 user$ pip install beautifulsoup4 위의 명령어를 입력하여 BeutifulSoup를 설치한다. 스크래핑할 페이지 갖고오기 from bs4 import BeautifulSoup from urllib.request import urlopen html = urlopen('http://dgucoop.dongguk.edu/store/store.php?w=4&l=2&j=0') source = html.read() html.close() print(source) 우선 BeautifulSoup을 import하고 홈페이지를 얻어오기 위해 urllib의 urlopen을 import해온다. 그리고 동국대학교 학식 식단표 페이지의 주소를 갖고 오도록 urlopen을 사용한 뒤 가져온...
-
Pyenv + VirtualEnv로 파이썬 가상 개발환경 구축하기
프로젝트를 진행하다보면 같은 파이썬 프로젝트라도 요구되는 파이썬 버전이나 사용하는 프레임워크의 버전이 다를 수 있다. 이런 문제를 해결해줄 수 있는 것이 pyenv와 Vvrtualenv이다. Mac OS X 기준으로 pyenv와 virtualenv를 setup 하고 설정하는 방법에 대해 기록해본다. pyenv: 로컬에 다양한 파이썬 버전을 설치하고 사용할 수 있도록 한다. pyenv를 사용함으로써 파이썬 버전에 대한 의존성을 해결할 수 있다. virtualenv: 로컬에 다양한 파이썬 환경을 구축하고 사용할 수 있도록 한다. 일반적으로 Python Packages라고 부르는 ( pip install을 통해서 설치하는 ) 패키지들에 대한...
-
Django fixture json파일 만들고 불러오기
app의 post데이터를 fixture로 만들기 >>> python manage.py dumpdata app.Post --indent 4 > post.json --indent 옵션을 이용하면 생성된 json파일이 좀 더 깔끔하게 출력된 것을 확인할 수 있다. (생략도 가능하다.) post.json 픽스쳐를 DB로 불러오기 >>> python manage.py loaddata post.json 위 명령어를 사용하면 해당 json파일을 DB로 불러올 수 있다.
-
Python study - Dictionary
지금 진행하고 있는 Django프로젝트에는 Dict자료형으로 데이터를 주고받는 경우가 많다. Dict를 처음 접해본 나로서는 헤매고, 구글링 하며 여러 자료를 찾아보곤 했었는데, 마침 좋은 자료가 있어서 이렇게 정리해 본다. Dictionary 딕셔너리는 사전형 자료구조로 key와 value사이의 관계를 저장한다. dict = {key: value} 생성하기 >>> d = {'jan': 1, 'feb': 2, 'mar': 3} >>> print d['jan'], d['feb'], d['mar'] 1, 2, 3 위 예시에서 'jan', 'feb', 'mar'는 d라는 딕셔너리의 Key에 해당하고, 1, 2, 3은 Value에 해당한다. >>> d = dict(jan=1,...