Teambition — это кроссплатформенный инструмент для командного сотрудничества и управления проектами, аналог зарубежного Trello. С помощью Teambion можно управлять прогрессом проекта подобно тому, как это делается с использованием доски и стикеров.
Хотя Teambition удобен для управления проектами, непосредственное создание задач в нём может привести к путанице и затруднениям при разделении задач на более мелкие.
При начале нового проекта автор обычно не сразу обращается к Teambition для написания задач, а использует инструмент планирования Workflowy для организации мыслей и разделения задач. После того как задачи разделены, они переносятся в Teambition.
Однако такой подход приводит к необходимости повторного ввода информации. Для решения этой проблемы был создан небольшой инструмент TeamFlowy. Он автоматически переносит определённые пункты из Workflowy в Teambition.
TeamFlowy представляет собой скрипт на Python. После запуска он входит в учётную запись Workflowy, считывает все пункты и добавляет задачи, начинающиеся с «[Teambition]», и их подпункты в Teambition. Если у подпункта есть свои подпункты, то они добавляются как подзадачи. В Workflowy пункт «[Teambition]» может иметь максимум два уровня отступа, так как в Teambition нет возможности создавать подпункты подпунктов.
Для получения пунктов из Workflowy необходимо выполнить три шага:
Чтобы войти в Workflowy через API, необходимо отправить запрос POST
на адрес https://workflowy.com/accounts/login/
. Запрос должен содержать поля username
, password
и next
.
Используя модуль requests
в Python, можно легко осуществить вход в систему. Пример кода:
login_url = 'https://workflowy.com/accounts/login/'
session = requests.Session()
session.post(login_url,
data={'username': '12345@qq.com',
'password': '8888888',
'next': ''})
После успешного входа в систему, Cookies сохраняются в объекте session
. Это позволяет просматривать собственные пункты после входа.
Интерфейс для получения всех пунктов — https://workflowy.com/get_initialization_data?client_version=18
. Ответ содержит большой JSON-объект со всеми пунктами пользователя.
В Python можно использовать модуль json
для анализа этого JSON и извлечения всех пунктов. Пример кода:
outline_url = 'https://workflowy.com/get_initialization_data?client_version=18'
outlines_json = session.get(outline_url).text
outlines_dict = json.loads(outlines_json)
project_list = outlines_dict.get('projectTreeData', {})\
.get('mainProjectTreeInfo', {})\
.get('rootProjectChildren', [])
Все пункты вложены в структуру списка и словаря. Базовый формат пункта:
{
"ch": [子条目],
"lm": 308496,
"id": "957996b9-67ce-51c7-a796-bfbee44e3d3f",
"nm": "AutoEmo"
}
Ключ nm
содержит название пункта. Если у пункта есть подпункты, ключ ch
будет содержать список словарей, каждый из которых описывает подпункт. Если пункта нет подпунктов, ключа ch
не будет.
Функция для извлечения задач и подзадач:
task_dict = {}
def extract_task(sections, task_dict, target_section=False):
for section in sections:
name = section['nm']
if target_section:
task_dict[name] = [x['nm'] for x in section.get('ch', [])]
continue
if name == '[Teambition]':
target_section = True
sub_sections = section.get('ch', [])
extract_task(sub_sections, task_dict, target_section=target_section)
Пример пункта, который нужно добавить в Teambion:
{'登录Workflowy': [], '获取需要添加到Teambition的内容': ['获取任务', '获取子任务'], '调试Teambition API': [], '添加任务到Teambition': []}
``` **Перевод текста на русский язык:**
#### Добавление задачи в Teambition с использованием Python SDK
Чтобы добавить задачу в Teambition, необходимо выполнить вход в систему с помощью Python SDK и вызвать API для добавления задачи. При использовании Python SDK для Teambition существует одна особенность, которую следует учитывать при получении access_token.
**Вход в систему Teambition**
* **Настройка приложения Teambition.** В Teambition используется OAuth2 для проверки прав доступа, поэтому необходимо получить access_token.
1. Откройте [Центр разработчиков](https://developer.teambition.com/dashboard) Teambition и нажмите «Создать приложение», как показано на рисунке.

2. Название приложения можно выбрать произвольно. После создания приложения вы увидите информацию о приложении, где необходимо записать Client ID и Client Secret, как показано на следующем рисунке.

3. Нажмите на «OAuth2» слева, чтобы заполнить URL обратного вызова. Здесь можно использовать любой доступный домен веб-сайта, например, мой блог.

* **Получение access_token с помощью Python**
1. Сначала установите Python SDK Teambition:
```bash
pip install teambition
```
2. Затем получите URL авторизации в Python:
```python
from teambition import Teambition
tb_client_id = '7bfae080-a8dc-11e7-b543-77a936726657'
tb_client_secret = '9830fc8c-81b3-45ed-b3c0-e039ab8f2d8b'
tb = Teambition(tb_client_id,
tb_client_secret)
authorize_url = tb.oauth.get_authorize_url('https://kingname.info')
print(authorize_url)
```
После выполнения кода вы получите следующий URL авторизации:
В браузере перейдите по этому URL вручную. Вы увидите следующую страницу:

Нажмите «Авторизовать и войти», и вы увидите, что URL браузера изменился на `https://kingname.info/?code=Pn7ebs4sZh3NYOz2FvVJQ4uu`. Запишите строку `Pn7ebs4sZh3NYOz2FvVJQ4uu`, которая следует за `code=` в URL.
Теперь переходим к использованию Python SDK Teambition. Согласно документации Teambition, для получения access_token достаточно следующих двух строк кода:
```python
code = 'Pn7ebs4sZh3NYOz2FvVJQ4uu' #передняя строка браузера
tb.oauth.fetch_access_token(code)
# После выполнения этого кода будет выполнена авторизация, и затем можно напрямую использовать tb.xxxx для управления задачами.
Однако на самом деле этот код обязательно вызовет ошибку. Ошибка grant invaild
. Чтобы решить эту проблему, необходимо использовать HTTP-интерфейс Teambition для ручного получения access_token:
code = 'Pn7ebs4sZh3NYOz2FvVJQ4uu' #строка браузера
fetch_result_dict = session.post('https://account.teambition.com/oauth2/access_token',
data={'client_id': tb_client_id,
'client_secret': tb_client_secret,
'code': code,
'grant_type': 'code'}).json()
tb_access_token = fetch_result_dict.get('access_token', '')
Полученный access_token представляет собой очень длинную строку. Теперь повторно инициализируйте переменную tb
:
tb = Teambition(tb_client_id,
tb_client_secret,
access_token=tb_access_token)
Инициализировав переменную, вы можете выполнять различные операции над проектами и задачами с её помощью.
Простое использование Teambition
Для создания задачи в определённом проекте необходимо знать идентификатор проекта. Сначала создайте проект вручную в Teambition и откройте его в браузере. Идентификатор проекта можно увидеть в URL, как показано ниже:
Зная идентификатор проекта, можно создать задачу с помощью следующего кода:
def create_task(task_name, sub_task_list):
tasklist = tb.tasklists.get(project_id='59d396ee1013d919f3348675')[0]
tasklist_id = tasklist['_id']
todo_stage_id = tasklist['stageIds'][0]
task_info = tb.tasks.create(task_name, tasklist_id=tasklist_id, stage_id=todo_stage_id)
if sub_task_list:
task_id = task_info['_id']
for sub_task_name in sub_task_list:
tb.subtasks.create(sub_task_name, task_id=task_id)
print(f'task: {task_name} with sub tasks: {sub_task_list} added.')
Этот код сначала использует tb.tasklists.get()
для получения идентификатора списка задач и идентификатора панели «Ожидание обработки» на основе идентификатора проекта. Затем вызывается tb.tasks.create()
для создания задачи. Из информации о созданной задаче берётся идентификатор задачи, а затем вызывается tb.subtasks.create()
, чтобы добавить дочерние задачи на основе идентификатора задачи.
Приведённый выше код реализует основную логику TeamFlowy. После запуска сценария TeamFlowy задача успешно добавляется в Teambition, как показано на изображении ниже:
Объединив код и улучшив его, можно сделать его более удобным в использовании. Полный код можно найти на GitHub по адресу https://github.com/kingname/TeamFlowy. Для запуска полного кода требуется Python 3. Результат работы полного кода показан ниже:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )