* Udemy custom connector

* Added Known Issues and Limitations

* Added properties description
This commit is contained in:
Nanddeep Nachan 2022-05-11 02:14:10 +05:30 коммит произвёл GitHub
Родитель 7b8fd24403
Коммит 1c84912920
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 899 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,828 @@
{
"swagger": "2.0",
"info": {
"title": "Udemy",
"description": "The Udemy helps one to get the information about Udemy learning courses.",
"version": "1.0",
"contact": {
"name": "Nanddeep Nachan, Smita Nachan",
"url": "https://www.nanddeepnachanblogs.com/",
"email": "NanddeepNachan@gmail.com"
}
},
"host": "www.udemy.com",
"basePath": "/api-2.0/",
"schemes": [
"https"
],
"consumes": [],
"produces": [],
"paths": {
"/courses": {
"get": {
"responses": {
"200": {
"description": "200",
"schema": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"format": "int32",
"description": "The number of courses"
},
"next": {
"type": "string",
"description": "Link to the next set of paging records"
},
"previous": {
"type": "string",
"description": "Link to the previous set of paging records"
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"_class": {
"type": "string",
"description": "Class of the course"
},
"id": {
"type": "integer",
"format": "int32",
"description": "Id of the course"
},
"title": {
"type": "string",
"description": "Title of the course"
},
"url": {
"type": "string",
"description": "URL of the course dashboard page"
},
"is_paid": {
"type": "boolean",
"description": "Whether the course is paid"
},
"price": {
"type": "string",
"description": "How much the course costs"
},
"price_detail": {
"type": "string",
"description": "The pricing detail of the cource"
},
"price_serve_tracking_id": {
"type": "string",
"description": "The tracking id of price serve for the course"
},
"visible_instructors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"_class": {
"type": "string",
"description": "Class of the instructor"
},
"title": {
"type": "string",
"description": "Title of the instructor"
},
"name": {
"type": "string",
"description": "Name of the instructor"
},
"display_name": {
"type": "string",
"description": "Display name of the instructor"
},
"job_title": {
"type": "string",
"description": "Job title of the instructor"
},
"image_50x50": {
"type": "string",
"description": "User image, dimensions 50x50"
},
"image_100x100": {
"type": "string",
"description": "User image, dimensions 100x100"
},
"initials": {
"type": "string",
"description": "Initials of the instructor"
},
"url": {
"type": "string",
"description": "Absolute URL of the user profile page"
}
}
},
"description": "An array of user objects which state the instructors of the course. Note that Udemy courses may have multiple instructors"
},
"image_125_H": {
"type": "string",
"description": "Course image, dimensions 125_H"
},
"image_240x135": {
"type": "string",
"description": "Course image, dimensions 240x135"
},
"is_practice_test_course": {
"type": "boolean",
"description": "Whether the course is a practice test course"
},
"image_480x270": {
"type": "string",
"description": "Course image, dimensions 480x270"
},
"published_title": {
"type": "string",
"description": "Published title of the course"
},
"tracking_id": {
"type": "string",
"description": "Tracking id of the course"
},
"predictive_score": {
"type": "string",
"description": "The predictive score of the course"
},
"relevancy_score": {
"type": "string",
"description": "The relevancy score of the course"
},
"input_features": {
"type": "string",
"description": "The input features of the course"
},
"lecture_search_result": {
"type": "string",
"description": "The lecture search result for the course"
},
"curriculum_lectures": {
"type": "array",
"items": {},
"description": "The list of curriculum lectures associated with the course"
},
"order_in_results": {
"type": "string",
"description": "The course order in the results"
},
"curriculum_items": {
"type": "array",
"items": {},
"description": "The list of curriculum items associated with the course"
},
"headline": {
"type": "string",
"description": "A short tweetable description of the course"
},
"instructor_name": {
"type": "string",
"description": "Name of the instructor for the course"
}
}
},
"description": "The list of courses"
},
"aggregations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id of the aggregation"
},
"title": {
"type": "string",
"description": "Title of the aggregation"
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Key of the aggregation option"
},
"title": {
"type": "string",
"description": "Title of the aggregation option"
},
"count": {
"type": "integer",
"format": "int32",
"description": "Count of the aggregation option"
},
"value": {
"type": "string",
"description": "Value of the aggregation option"
}
}
},
"description": "The list of aggregation options"
}
}
},
"description": "The list of aggregations"
},
"search_tracking_id": {
"type": "string",
"description": "The search tracking id"
}
}
}
}
},
"summary": "Get Courses",
"description": "Returns list of courses",
"operationId": "GetCourses",
"parameters": [
{
"name": "page",
"in": "query",
"required": false,
"type": "integer",
"description": "A numeric value indicating the current page. page*page_size cannot be larger than 10000.",
"x-ms-summary": "Current Page"
},
{
"name": "page_size",
"in": "query",
"required": false,
"type": "integer",
"description": "A numeric value indicating the page size. page*page_size cannot be larger than 10000.",
"x-ms-summary": "Page Size"
},
{
"name": "search",
"in": "query",
"required": false,
"type": "string",
"description": "Filter courses by a search term.",
"x-ms-summary": "Search Term"
},
{
"name": "category",
"in": "query",
"required": false,
"type": "string",
"description": "Filter courses by primary category.",
"x-ms-summary": "Primary Category"
},
{
"name": "subcategory",
"in": "query",
"required": false,
"type": "string",
"description": "Filter courses by primary subcategory.",
"x-ms-summary": "Primary Subcategory"
},
{
"name": "price",
"in": "query",
"required": false,
"type": "string",
"description": "Rank courses by price-paid, or price-free.",
"x-ms-summary": "Price"
},
{
"name": "is_affiliate_agreed",
"in": "query",
"required": false,
"type": "boolean",
"description": "Filter courses that are affiliate agreed.",
"x-ms-summary": "Is Affiliate Agreed"
},
{
"name": "is_deals_agreed",
"in": "query",
"required": false,
"type": "boolean",
"description": "Filter courses that are deals agreed.",
"x-ms-summary": "Is Deals Agreed"
},
{
"name": "language",
"in": "query",
"required": false,
"type": "string",
"description": "Filter courses by alpha-2 language code specified at http://www.loc.gov/standards/iso639-2/php/code_list.php",
"x-ms-summary": "Language Code"
},
{
"name": "has_closed_caption",
"in": "query",
"required": false,
"type": "boolean",
"description": "Filter courses that has closed caption.",
"x-ms-summary": "Has Closed Caption"
},
{
"name": "has_coding_exercises",
"in": "query",
"required": false,
"type": "boolean",
"description": "Filter courses that has coding exercises.",
"x-ms-summary": "Has Coding Exercises"
},
{
"name": "has_simple_quiz",
"in": "query",
"required": false,
"type": "boolean",
"description": "Filter courses that has simple quiz.",
"x-ms-summary": "Has Simple Quiz"
},
{
"name": "has_workspace",
"in": "query",
"required": false,
"type": "boolean",
"description": "Filter courses that has workspaces.",
"x-ms-summary": "Has Workspaces"
},
{
"name": "instructional_level",
"in": "query",
"required": false,
"type": "string",
"description": "Filter courses by instructional level.",
"x-ms-summary": "Instructional Level"
},
{
"name": "ordering",
"in": "query",
"required": false,
"type": "string",
"description": "Rank courses by relevance, most-reviewed, highest-rated, newest, price-low-to-high, or price-high-to-low.",
"x-ms-summary": "Ordering"
},
{
"name": "ratings",
"in": "query",
"required": false,
"type": "number",
"description": "Filter courses by minimum average rating.",
"x-ms-summary": "Average Rating"
},
{
"name": "duration",
"in": "query",
"required": false,
"type": "string",
"description": "Filter courses by course duration as short, medium, long, extraLong",
"x-ms-summary": "Course Duration"
},
{
"name": "subs_coll_id",
"in": "query",
"required": false,
"type": "integer",
"description": "User's subscription ids.",
"x-ms-summary": "Subscription Ids"
},
{
"name": "subs_filter_type",
"in": "query",
"required": false,
"type": "string",
"description": "Filter courses by subscription or non subscribed courses",
"x-ms-summary": "Subscription Filter Type"
}
]
}
},
"/courses/{pk}/": {
"get": {
"responses": {
"200": {
"description": "200",
"schema": {
"type": "object",
"properties": {
"_class": {
"type": "string",
"description": "Class of the course"
},
"id": {
"type": "integer",
"format": "int32",
"description": "Id of the course"
},
"title": {
"type": "string",
"description": "Title of the course"
},
"url": {
"type": "string",
"description": "URL of the course"
},
"is_paid": {
"type": "boolean",
"description": "Whether the course is paid"
},
"price": {
"type": "string",
"description": "URL of the course dashboard page"
},
"price_detail": {
"type": "string",
"description": "The pricing detail of the cource"
},
"price_serve_tracking_id": {
"type": "string",
"description": "The tracking id of price serve for the course"
},
"visible_instructors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"_class": {
"type": "string",
"description": "Class of the instructor"
},
"title": {
"type": "string",
"description": "Title of the instructor"
},
"name": {
"type": "string",
"description": "Name of the instructor"
},
"display_name": {
"type": "string",
"description": "Display name of the instructor"
},
"job_title": {
"type": "string",
"description": "Job title of the instructor"
},
"image_50x50": {
"type": "string",
"description": "User image, dimensions 50x50"
},
"image_100x100": {
"type": "string",
"description": "User image, dimensions 100x100"
},
"initials": {
"type": "string",
"description": "Initials of the instructor"
},
"url": {
"type": "string",
"description": "Absolute URL of the user profile page"
}
}
},
"description": "An array of user objects which state the instructors of the course. Note that Udemy courses may have multiple instructors"
},
"image_125_H": {
"type": "string",
"description": "Course image, dimensions 125_H"
},
"image_240x135": {
"type": "string",
"description": "Course image, dimensions 240x135"
},
"is_practice_test_course": {
"type": "boolean",
"description": "Whether the course is a practice test course"
},
"image_480x270": {
"type": "string",
"description": "Course image, dimensions 480x270"
},
"published_title": {
"type": "string",
"description": "Published title of the course"
},
"tracking_id": {
"type": "string",
"description": "Tracking id of the course"
}
}
}
}
},
"summary": "Get Course Details",
"description": "Returns course with specified pk.",
"operationId": "GetCourseDetails",
"parameters": [
{
"name": "pk",
"in": "path",
"required": true,
"type": "integer",
"description": "A numeric course identifier.",
"x-ms-summary": "Course Identifier",
"x-ms-url-encoding": "single"
}
]
}
},
"/courses/{course_id}/reviews/": {
"get": {
"responses": {
"200": {
"description": "200",
"schema": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"format": "int32",
"description": "The number of reviewes for the course"
},
"next": {
"type": "string",
"description": "Link to the next set of paging records"
},
"previous": {
"type": "string",
"description": "Link to the previous set of paging records"
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"_class": {
"type": "string",
"description": "Class of the review"
},
"id": {
"type": "integer",
"format": "int32",
"description": "Id of the review"
},
"title": {
"type": "string",
"description": "Title of the review"
},
"content": {
"type": "string",
"description": "Content of the review"
},
"rating": {
"type": "integer",
"format": "int32",
"description": "Rating given by the review"
},
"created": {
"type": "string",
"description": "When the review was created"
},
"modified": {
"type": "string",
"description": "When the review was modified"
},
"user_modified": {
"type": "string",
"description": "Time the course review was last modified"
},
"user": {
"type": "object",
"properties": {
"_class": {
"type": "string",
"description": "Class of the user"
},
"title": {
"type": "string",
"description": "Title of the user"
},
"name": {
"type": "string",
"description": "Name of the user"
},
"display_name": {
"type": "string",
"description": "Display name of the user"
}
},
"description": "The user who created the review"
}
}
},
"description": "A list of reviews for the course"
}
}
}
}
},
"summary": "Get Course Reviews",
"description": "Returns list of course reviews",
"operationId": "GetCourseReviews",
"parameters": [
{
"name": "course_id",
"in": "path",
"required": true,
"type": "integer",
"description": "A numeric course identifier.",
"x-ms-summary": "Course Identifier",
"x-ms-url-encoding": "single"
},
{
"name": "page",
"in": "query",
"required": false,
"type": "integer",
"description": "A numeric value indicating the current page.",
"x-ms-summary": "Current Page"
},
{
"name": "page_size",
"in": "query",
"required": false,
"type": "integer",
"description": "A numeric value indicating the page size.",
"x-ms-summary": "Page Size"
}
]
}
},
"/courses/{course_id}/public-curriculum-items": {
"get": {
"responses": {
"200": {
"description": "200",
"schema": {
"type": "object",
"properties": {
"_class": {
"type": "string",
"description": "Class of the public curriculum item"
},
"id": {
"type": "integer",
"format": "int32",
"description": "Id of the public curriculum item"
},
"title": {
"type": "string",
"description": "Title of the public curriculum item"
},
"url": {
"type": "string",
"description": "URL of the public curriculum item"
},
"is_paid": {
"type": "boolean",
"description": "Whether the public curriculum item is paid"
},
"price": {
"type": "string",
"description": "Price of the public curriculum item"
},
"price_detail": {
"type": "string",
"description": "The pricing detail of the public curriculum item"
},
"price_serve_tracking_id": {
"type": "string",
"description": "The tracking id of price serve for the public curriculum item"
},
"visible_instructors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"_class": {
"type": "string",
"description": "Class of the visible instructor"
},
"title": {
"type": "string",
"description": "Title of the visible instructor"
},
"name": {
"type": "string",
"description": "Name of the visible instructor"
},
"display_name": {
"type": "string",
"description": "Display name of the visible instructor"
},
"job_title": {
"type": "string",
"description": "Job title of the visible instructor"
},
"image_50x50": {
"type": "string",
"description": "User image, dimensions 50x50"
},
"image_100x100": {
"type": "string",
"description": "User image, dimensions 100x100"
},
"initials": {
"type": "string",
"description": "Initials of the visible instructor"
},
"url": {
"type": "string",
"description": "URL of the visible instructor"
}
}
},
"description": "List of visible instructors for the public curriculum item"
},
"image_125_H": {
"type": "string",
"description": "Visible instructor image, dimensions 125_H"
},
"image_240x135": {
"type": "string",
"description": "Visible instructor image, dimensions 240x135"
},
"is_practice_test_course": {
"type": "boolean",
"description": "Whether a course is a practice test course"
},
"image_480x270": {
"type": "string",
"description": "Visible instructor image, 480x270"
},
"published_title": {
"type": "string",
"description": "Published title of the visible instructor"
},
"tracking_id": {
"type": "string",
"description": "Tracking id of the visible instructor"
}
}
}
}
},
"summary": "Get Public Curriculum Items",
"description": "Returns list of curriculum items.",
"operationId": "GetPublicCurriculumItems",
"parameters": [
{
"name": "course_id",
"in": "path",
"required": true,
"type": "integer",
"description": "A numeric course identifier.",
"x-ms-summary": "Course Identifier",
"x-ms-url-encoding": "single"
},
{
"name": "page",
"in": "query",
"required": false,
"type": "integer",
"description": "A numeric value indicating the current page.",
"x-ms-summary": "Current Page"
},
{
"name": "page_size",
"in": "query",
"required": false,
"type": "integer",
"description": "A numeric value indicating the page size.",
"x-ms-summary": "Page Size"
}
]
}
}
},
"definitions": {},
"parameters": {},
"responses": {},
"securityDefinitions": {
"basic_auth": {
"type": "basic"
}
},
"security": [
{
"basic_auth": []
}
],
"tags": [],
"x-ms-connector-metadata": [
{
"propertyName": "Website",
"propertyValue": "https://www.udemy.com/"
},
{
"propertyName": "Privacy Policy",
"propertyValue": "https://www.udemy.com/terms/privacy/"
},
{
"propertyName": "Categories",
"propertyValue": "Website"
}
]
}

Просмотреть файл

@ -0,0 +1,36 @@
{
"properties": {
"connectionParameters": {
"username": {
"type": "securestring",
"uiDefinition": {
"displayName": "Client ID",
"description": "The Client ID for this api",
"tooltip": "Provide the Client ID",
"constraints": {
"tabIndex": 2,
"clearText": true,
"required": "true"
}
}
},
"password": {
"type": "securestring",
"uiDefinition": {
"displayName": "Client Secret",
"description": "The Client Secret for this api",
"tooltip": "Provide the Client Secret",
"constraints": {
"tabIndex": 3,
"clearText": false,
"required": "true"
}
}
}
},
"iconBrandColor": "#da3b01",
"capabilities": [],
"publisher": "Nanddeep Nachan, Smita Nachan",
"stackOwner": "Udemy"
}
}

Просмотреть файл

@ -0,0 +1,35 @@
# Udemy
[Udemy](https://www.udemy.com) is an online learning and teaching marketplace.
## Publisher: Nanddeep Nachan, Smita Nachan
## Prerequisites
You need to have an Udemy account. You can [sign up](https://www.udemy.com/join/signup-popup/) for free.
## Supported Operations
### Get Courses
Returns list of courses.
### Get Course Details
Returns course with specified pk.
### Get Course Reviews
Returns list of course reviews.
### Get Public Curriculum Items
Returns list of curriculum items.
## Obtaining Credentials
The Udemy Affiliate API exposes functionalities of Udemy to help developers build client applications and integrations with Udemy.
To create an Affiliate API client, Sign up on [Udemy](www.udemy.com) and go to the [API Clients](https://www.udemy.com/user/edit-api-clients) page in your user profile. Once your Affiliate API client request is approved, your newly created Affiliate API client will be active and your bearer token will be visible on the [API Clients](https://www.udemy.com/user/edit-api-clients) page.
## Getting Started
Visit [Udemy Affiliate API](https://www.udemy.com/developers/affiliate/) documentation page for further details. You may need to sign in to Udemy to view it.
## Known Issues and Limitations
Udemy Affiliate APIs are protected with [Cloudflare](https://www.cloudflare.com/) captcha solution. The API requests from the Custom Connector UI and Power Apps might get blocked due to this. To overcome this limitation, you may consider [using Privacy Pass with Cloudflare](https://support.cloudflare.com/hc/en-us/articles/115001992652-Using-Privacy-Pass-with-Cloudflare).
On the other hand, the connector works fine with Power Automate.
## Deployment Instructions
Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as custom connector in Microsoft Power Automate and Power Apps.