Пока решал данную проблему, постиг мудрость:
На семинарах руководитель показывает презентацию со списками задач по каждому сотруднику. Каждую неделю, перед семинаром, он тратит более получаса на принтскрины из браузера списков в Basecamp'e. Но кроме того что он делает скрины, он еще обрезает/перемещает содержимое, что бы вместилось на слайд.
Вообще очень позитивно сказывается на решение задач.
Задача:
Тут задача разбилась на этапы:
Долго разбирался, не хватало какого-то малого ключа, поэтому рекомендую начать с теории и зайти на htmlbook.ru.
Собственно из кода ниже можно сделать, мне кажется, вход на почти любой сайт. Данные для словаря authData можно узнать с помощью дополнения типа Firebug. После авторизации посмотрев в данные ушедшие на сервер с POST-запросом.
Далее, для вычленения ссылок на сотрудников и удаления лишних блоков на странице использовалась библиотека BeautifulSoup. Документация на сайте[5] подробно излагает возможности.
Отмечу что я использовал:
Нельзя путать цель и способ достижения цели.Интро:
На семинарах руководитель показывает презентацию со списками задач по каждому сотруднику. Каждую неделю, перед семинаром, он тратит более получаса на принтскрины из браузера списков в Basecamp'e. Но кроме того что он делает скрины, он еще обрезает/перемещает содержимое, что бы вместилось на слайд.
Вообще очень позитивно сказывается на решение задач.
Задача:
- Сэкономить время руководителя скриптом (что всегда полезно)
- И научиться пользоваться python (http://bash.im/quote/436725)
Первоначальная стратегия
я решил пойти путём прямой автоматизации. Т.е. сделать всё тоже самое что он делает руками, но с помощью Python'a (как оказалось, это съело море моего времени и конечный результат не достигнут, поэтому и надо не путать цель и способ достижения цели ><)
Тут задача разбилась на этапы:
- авторизация на сайте Basecamp.com
- парсинг html
- получение списка сотрудников
- получение списка задач назначенных на каждого сотрудника
- удаление лишнего со страницы
- сохранение html
- преобразование html -> pdf/png/ppt (во что-нибудь, что бы вставлять в презентацию)
Первый подход
В интернете куча примеров авторизации, так же рекомендуют использовать "помошники" типа grab (в нем всё проще, но он под python2, вот не хотелось и всё)Долго разбирался, не хватало какого-то малого ключа, поэтому рекомендую начать с теории и зайти на htmlbook.ru.
Собственно из кода ниже можно сделать, мне кажется, вход на почти любой сайт. Данные для словаря authData можно узнать с помощью дополнения типа Firebug. После авторизации посмотрев в данные ушедшие на сервер с POST-запросом.
#!/usr/bin/env python3
import requests
import bs4
project_id = *******
#proxies = {'http': 'http://www-proxy.local:3128/'}
url = 'https://launchpad.37signals.com/basecamp'
html = requests.get(url)
soup = bs4.BeautifulSoup(html.text, "lxml")
hiddenAuthKey = soup.find('input', {'name': 'authenticity_token'})['value']
authData = {
'password':'**********',
'username':'**********',
'utf8':'✓',
'authenticity_token':hiddenAuthKey,
'product':'basecamp',
'x':169,
'y':34}
url = 'https://launchpad.37signals.com/session'
s = requests.Session()
s.post(url,data=authData,headers={"Referer":"https://launchpad.37signals.com/basecamp"},verify=True)
page = s.get('https://basecamp.com/'+project_id+'/projects/1416343',verify=True)
Далее, для вычленения ссылок на сотрудников и удаления лишних блоков на странице использовалась библиотека BeautifulSoup. Документация на сайте[5] подробно излагает возможности.
Отмечу что я использовал:
person_list = soup.findAll('a','person_name') # нахождение тегов a с классом person_name
soup.find('header').decompose() # метод удаляющий из кода соответствующий блок
Еще, на будущее, хочу отметить библиотеку pdfkit пригодную для конвертации html в pdf. На практике с ней не сложилось: были проблемы с использованием родных стилей и кодировки странички.
Так же, была опробована идея с использованием webkit2png. Идея простая - создается webkit окно, в котором отрисовывается html-страница и сохраняется как png изображение. К сожалению, тоже не сложилось.
Один из трудных моментов был кроссплатформенность.
Под linux у меня всё работало. Под windows были неопределенные проблемы.
Правильная стратегия
И тут я вспомнил цель.
Была найдена библиотека pyrate. Работоспособна, но для python2. Эта библиотека, помимо basecamp поддерживает: Github, Harvest, Mailchimp, Twitter (v1.1 + OAuth). Библиотека имеет скудное описание, но работает. На просторах было найдено описание API Basecamp[8] и дальше уже не трудно.
Созданием презентации из данных занимается библиотека python-pptx [9].
bc2ppt.py - после запуска скрипта, рядом появиться не форматированная презентация с задачами каждого сотрудника.
Открытые вкладки в процессе:
- http://htmlbook.ru/samhtml5/formy/otpravka-dannykh-formy Теория. Must read.
- http://docs.python-requests.org/en/latest/user/quickstart/
- http://www.cyberforum.ru
- http://grablib.org/ Говорят крутая библиотека, которая могла бы сократить мои страдания.... но у меня не заработала. Ни под 3 ни под 2.
- http://wiki.python.su/Документации/BeautifulSoup
- https://habrahabr.ru/post/121815/ - Парсинг на Pуthon.
- https://pypi.python.org/pypi/pyrate/0.5a6 Pyrate is a python wrapper for restful web apis. It's like magic but simpler.
- https://github.com/basecamp/basecamp-classic-api описание API Basecamp
- http://python-pptx.readthedocs.org/en/latest/
Комментариев нет:
Отправить комментарий