1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/kingname-TeamFlowy

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

TeamFlowy — объединение Teambition и Workflowy

Teambition — это кроссплатформенный инструмент для командного сотрудничества и управления проектами, аналог зарубежного Trello. С помощью Teambion можно управлять прогрессом проекта подобно тому, как это делается с использованием доски и стикеров.

Хотя Teambition удобен для управления проектами, непосредственное создание задач в нём может привести к путанице и затруднениям при разделении задач на более мелкие.

При начале нового проекта автор обычно не сразу обращается к Teambition для написания задач, а использует инструмент планирования Workflowy для организации мыслей и разделения задач. После того как задачи разделены, они переносятся в Teambition.

Однако такой подход приводит к необходимости повторного ввода информации. Для решения этой проблемы был создан небольшой инструмент TeamFlowy. Он автоматически переносит определённые пункты из Workflowy в Teambition.

Описание функций

TeamFlowy представляет собой скрипт на Python. После запуска он входит в учётную запись Workflowy, считывает все пункты и добавляет задачи, начинающиеся с «[Teambition]», и их подпункты в Teambition. Если у подпункта есть свои подпункты, то они добавляются как подзадачи. В Workflowy пункт «[Teambition]» может иметь максимум два уровня отступа, так как в Teambition нет возможности создавать подпункты подпунктов.

Принцип работы

Workflowy

Для получения пунктов из Workflowy необходимо выполнить три шага:

  1. Войти в Workflowy.
  2. Получить JSON-строку со всеми пунктами.
  3. Выделить пункты, которые нужно добавить в 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 и нажмите «Создать приложение», как показано на рисунке.

        ![](http://7sbpmp.com1.z0.glb.clouddn.com/2017-10-04-16-14-38.png)

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

         ![](http://7sbpmp.com1.z0.glb.clouddn.com/2017-10-04-16-18-20.png)

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

      ![](http://7sbpmp.com1.z0.glb.clouddn.com/2017-10-04-16-20-49.png)

* **Получение 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 авторизации:

https://account.teambition.com/oauth2/authorize?client_id=7bfae080-a8dc-11e7-b543-77a936726657&redirect_uri=https://kingname.info&state=&lang=zh


В браузере перейдите по этому URL вручную. Вы увидите следующую страницу:

![](http://7sbpmp.com1.z0.glb.clouddn.com/2017-10-04-16-31-25.png)

Нажмите «Авторизовать и войти», и вы увидите, что 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/kingname-TeamFlowy.git
git@api.gitlife.ru:oschina-mirror/kingname-TeamFlowy.git
oschina-mirror
kingname-TeamFlowy
kingname-TeamFlowy
master