{"id":13655,"date":"2022-04-29T15:58:38","date_gmt":"2022-04-29T15:58:38","guid":{"rendered":"https:\/\/docs_v3.dataforseo.com\/v3\/?page_id=13655"},"modified":"2023-10-20T13:44:10","modified_gmt":"2023-10-20T13:44:10","slug":"app_data-tasks_ready","status":"publish","type":"page","link":"https:\/\/docs.dataforapps.com\/v3\/app_data-tasks_ready\/","title":{"rendered":"app_data\/tasks_ready"},"content":{"rendered":"<p>[vc_row][vc_column][vc_column_text]<\/p>\n<h2 id=\"get-app_data-google-app_searches-completed-tasks\">Get {{up_se_name}} {{normal_se_type}} Completed Tasks<\/h2>\n<p>\u200c<br \/>\nThe <strong>&#8216;Tasks Ready&#8217;<\/strong> endpoint is designed to provide you with a list of completed tasks that haven&#8217;t been collected yet. If you use the Standard method without specifying the <code>postback_url<\/code>, you can receive the list of <code>id<\/code> for all completed tasks using this endpoint. Then, you can collect the results using the <strong>\u2018Task GET\u2019<\/strong> endpoints.<\/p>\n<p><strong>Note:<\/strong> due to the peculiarities of our architecture the queue of completed tasks is updated with a small delay, which can be an issue for high-volume users. If your system requires collecting over 1000 tasks a minute, we recommend using pingbacks and postbacks instead, and applying the Tasks Ready endpoint only to obtain the IDs of failed postback tasks.<br \/>\n[\/vc_column_text]\n        <blockquote>\n            <p>Instead of \u2018login\u2019 and \u2018password\u2019 use your credentials from https:\/\/app.dataforapps.com\/api-dashboard<\/p>\n        <\/blockquote>\n        <pre class=\"highlight bash tab-bash\" style=\"display: none;\">\n            <\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mocha\">\r\n# Instead of 'login' and 'password' use your credentials from https:\/\/app.dataforapps.com\/api-dashboard \r\nlogin=\"login\" \r\npassword=\"password\" \r\ncred=\"$(printf ${login}:${password} | base64)\" \r\ncurl --location --request GET \"https:\/\/api.dataforapps.com\/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/tasks_ready\" \r\n--header \"Authorization: Basic ${cred}\"  \r\n--header \"Content-Type: application\/json\" \r\n--data-raw \"\"\r\n<\/pre>\n<p>\n        <\/pre>\n        <pre class=\"highlight php tab-php\" style=\"display: block;\"><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-theme=\"mocha\">&lt;?php\r\n\/\/ You can download this file from here https:\/\/cdn.dataforapps.com\/v3\/examples\/php\/php_RestClient.zip\r\nrequire('RestClient.php');\r\n$api_url = 'https:\/\/api.dataforapps.com\/';\r\n\/\/ Instead of 'login' and 'password' use your credentials from https:\/\/app.dataforapps.com\/api-dashboard\r\n$client = new RestClient($api_url, null, 'login', 'password');\r\n\r\ntry {\r\n   \/\/ using this method you can get a list of completed tasks\r\n   \/\/ GET \/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/tasks_ready\r\n   $result = $client-&gt;get('\/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/tasks_ready');\r\n   print_r($result);\r\n   \/\/ do something with result\r\n} catch (RestClientException $e) {\r\n   echo \"n\";\r\n   print \"HTTP code: {$e-&gt;getHttpCode()}n\";\r\n   print \"Error code: {$e-&gt;getCode()}n\";\r\n   print \"Message: {$e-&gt;getMessage()}n\";\r\n   print  $e-&gt;getTraceAsString();\r\n   echo \"n\";\r\n}\r\n$client = null;\r\n?&gt;<\/pre>\n<p><\/pre>\n        <pre class=\"highlight python tab-python\" style=\"display: none;\">\n            <\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"mocha\">from client import RestClient\r\n# You can download this file from here https:\/\/cdn.dataforapps.com\/v3\/examples\/python\/python_Client.zip\r\nclient = RestClient(\"login\", \"password\")\r\n# using this method you can get a list of completed tasks\r\n# GET \/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/tasks_ready\r\nresponse = client.get(\"\/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/tasks_ready\")\r\n# you can find the full list of the response codes here https:\/\/docs.dataforapps.com\/v3\/appendix\/errors\r\nif response[\"status_code\"] == 20000:\r\n    print(response)\r\n    # do something with result\r\nelse:\r\n    print(\"error. Code: %d Message: %s\" % (response[\"status_code\"], response[\"status_message\"]))\r\n<\/pre>\n<p>\n        <\/pre>\n        <pre class=\"highlight javascript tab-javascript\" style=\"display: none;\">\n            <\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mocha\">\r\n\r\nconst axios = require('axios');\r\n\r\naxios({\r\n    method: 'get',\r\n    url: 'https:\/\/api.dataforapps.com\/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/tasks_ready',\r\n    auth: {\r\n        username: 'login',\r\n        password: 'password'\r\n    },\r\n    headers: {\r\n        'content-type': 'application\/json'\r\n    }\r\n}).then(function (response) {\r\n    var result = response['data']['tasks'][0]['result'];\r\n    \/\/ Result data\r\n    console.log(result);\r\n}).catch(function (error) {\r\n    console.log(error);\r\n});\r\n<\/pre>\n<p>\n        <\/pre>\n        <pre class=\"highlight csharp tab-csharp\" style=\"display: none;\">\n            <\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"mocha\">using System.Net.Http;\r\nusing System.Net.Http.Headers;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace DataForSeoDemos\r\n{\r\n    public static partial class Demos\r\n    {\r\n        public static async Task app_data_{{low_se_name_under}}_{{low_se_type_under}}_tasks_ready()\r\n        {\r\n            var httpClient = new HttpClient\r\n            {\r\n                BaseAddress = new Uri(\"https:\/\/api.dataforapps.com\/\"),\r\n                \/\/ Instead of 'login' and 'password' use your credentials from https:\/\/app.dataforapps.com\/api-dashboard\r\n                DefaultRequestHeaders = { Authorization = new AuthenticationHeaderValue(\"Basic\", Convert.ToBase64String(Encoding.ASCII.GetBytes(\"login:password\"))) }\r\n            };\r\n            \/\/ using this method you can get a list of completed tasks\r\n            \/\/ GET \/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/tasks_ready\r\n            var response = await httpClient.GetAsync(\"\/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/tasks_ready\");\r\n            var result = JsonConvert.DeserializeObject&lt;dynamic&gt;(await response.Content.ReadAsStringAsync());\r\n            \/\/ you can find the full list of the response codes here https:\/\/docs.dataforapps.com\/v3\/appendix\/errors\r\n            if (result.status_code == 20000)\r\n            {\r\n                \/\/ do something with result\r\n                Console.WriteLine(result);\r\n            }\r\n            else\r\n                Console.WriteLine($\"error. Code: {result.status_code} Message: {result.status_message}\");\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>\n        <\/pre>\n        <blockquote>\n            <p>The above command returns JSON structured like this:<\/p>\n        <\/blockquote>\n        <pre class=\"json tab-json\"><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"mocha\">{\r\n    \"version\": \"0.1.20220422\",\r\n    \"status_code\": 20000,\r\n    \"status_message\": \"Ok.\",\r\n    \"time\": \"0.1098 sec.\",\r\n    \"cost\": 0,\r\n    \"tasks_count\": 1,\r\n    \"tasks_error\": 0,\r\n    \"tasks\": [\r\n        {\r\n            \"id\": \"04221432-2806-0429-0000-bc2a174bad1b\",\r\n            \"status_code\": 20000,\r\n            \"status_message\": \"Ok.\",\r\n            \"time\": \"0.0612 sec.\",\r\n            \"cost\": 0,\r\n            \"result_count\": 1,\r\n            \"path\": [\r\n                \"v3\",\r\n                \"{{low_se_type_under}}\",\r\n                \"{{low_se_name_under}}\",\r\n                \"app_searches\",\r\n                \"tasks_ready\"\r\n            ],\r\n            \"data\": {\r\n                \"se_type\": \"organic\",\r\n                \"se\": \"{{low_se_name_under}}\",\r\n                \"api\": \"app_data\",\r\n                \"function\": \"{{low_se_type_under}}\"\r\n            },\r\n            \"result\": [\r\n                {\r\n                    \"id\": \"04221432-2806-0428-0000-0f41c4d141bf\",\r\n                    \"se\": \"{{low_se_name_under}}\",\r\n                    \"date_posted\": \"2022-04-22 11:32:38 +00:00\",\r\n                    \"tag\": \"\",\r\n                    \"endpoint_advanced\": \"\/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/task_get\/advanced\/04221432-2806-0428-0000-0f41c4d141bf\",\r\n                    \"endpoint_html\": \"\/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/task_get\/html\/04221432-2806-0428-0000-0f41c4d141bf\"\r\n                }\r\n            ]\r\n        }\r\n    ]\r\n}<\/pre>\n<p><\/pre><aside class=\"success\"><b><code>GET https:\/\/api.dataforapps.com\/v3\/app_data\/{{low_se_name_under}}\/{{low_se_type_under}}\/tasks_ready<\/code><\/b><\/aside><aside class=\"notice\">Your account is not charged when receiving results<\/aside>[vc_column_text]<\/p>\n<p>Each separate task will remain on the list until it is collected. You can make <strong>up to 20 API calls per minute.<\/strong> With each API call, you can get 1000 tasks completed within three previous days. The list will not contain the tasks which have already been collected and the tasks that were not collected <strong>within the three days<\/strong> after completion.<\/p>\n<p>Please note that if you specify the <code class=\"prettyprint\">postback_url<\/code>, the task will not be in the list of completed tasks. The task can only be found in the list if the request to your server failed, and your server returned HTTP code response less than <code class=\"prettyprint\">200<\/code> or higher than <code class=\"prettyprint\">300<\/code>.<\/p>\n<p>As a response of the API server, you will receive <a href=\"https:\/\/en.wikipedia.org\/wiki\/JSON\">JSON<\/a>-encoded data containing a <code>tasks<\/code> array with the information specific to the set tasks.<\/p>\n<p><strong>Description of the fields in the results array:<\/strong><\/p>\n<table style=\"width: 77.3646%; height: 840px;\">\n<thead>\n<tr style=\"height: 24px;\">\n<th style=\"width: 24.3517%; height: 24px;\">Field name<\/th>\n<th style=\"width: 6.19209%; height: 24px;\">Type<\/th>\n<th style=\"width: 79.8065%; height: 24px;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 48px;\">\n<td style=\"width: 24.3517%; height: 48px;\"><code>version<\/code><\/td>\n<td style=\"width: 6.19209%; height: 48px;\">string<\/td>\n<td style=\"width: 79.8065%; height: 48px;\"><em>the current version of the API<\/em><\/td>\n<\/tr>\n<tr style=\"height: 48px;\">\n<td style=\"width: 38.423%; height: 48px;\"><code>status_code<\/code><\/td>\n<td style=\"width: 1.75219%; height: 48px;\">integer<\/td>\n<td style=\"width: 61.2015%; height: 48px;\"><i>general status code<\/i><br \/>\nyou can find the full list of the response codes <a href=\"\/v3\/appendix\/errors\">here<\/a><br \/>\n<strong>Note:<\/strong> we strongly recommend designing a necessary system for handling related exceptional or error conditions<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\"><code>status_message<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">string<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>general informational message<\/em><br \/>\nyou can find the full list of general informational messages <a href=\"\/v3\/appendix\/errors\">here<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\"><code>time<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">string<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>execution time, seconds<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\"><code>cost<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">float<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>total tasks cost, USD<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\"><code>tasks_count<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">integer<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>the number of tasks in the <strong><code>tasks<\/code><\/strong> array<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\"><code>tasks_error<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">integer<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>the number of tasks in the <strong><code>tasks<\/code><\/strong> array returned with an error<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\"><strong><code>tasks<\/code><\/strong><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">array<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>array of tasks<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\">\u00a0 \u00a0 \u00a0 \u00a0 <code>id<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">string<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>task identifier<\/em><br \/>\n<strong>unique task identifier in our system in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Universally_unique_identifier\">UUID<\/a> format<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 48px;\">\n<td style=\"width: 24.3517%; height: 48px;\">\u00a0 \u00a0 \u00a0 \u00a0 <code>status_code<\/code><\/td>\n<td style=\"width: 6.19209%; height: 48px;\">integer<\/td>\n<td style=\"width: 79.8065%; height: 48px;\"><em>status code of the task<\/em><br \/>\ngenerated by DataForApps; can be within the following range: 10000-60000<br \/>\nyou can find the full list of the response codes <a href=\"\/v3\/appendix\/errors\">here<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\">\u00a0 \u00a0 \u00a0 \u00a0 <code>status_message<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">string<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>informational message of the task<\/em><br \/>\nyou can find the full list of general informational messages <a href=\"\/v3\/appendix\/errors\">here<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\">\u00a0 \u00a0 \u00a0 \u00a0 <code>time<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">string<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>execution time, seconds<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\">\u00a0 \u00a0 \u00a0 \u00a0 <code>cost<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">float<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>cost of the task, USD<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\">\u00a0 \u00a0 \u00a0 \u00a0 <code>result_count<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">integer<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>number of elements in the <code>result<\/code> array<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\">\u00a0 \u00a0 \u00a0 \u00a0 <code>path<\/code><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">array<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>URL path<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 38.423%; height: 24px;\">\u00a0 \u00a0 \u00a0 \u00a0 <code>data<\/code><\/td>\n<td style=\"width: 1.25156%; height: 24px;\">object<\/td>\n<td style=\"width: 61.7021%; height: 24px;\"><em>contains the parameters passed in the request&#8217;s URL<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 24.3517%; height: 24px;\"><strong>\u00a0 \u00a0 \u00a0 \u00a0 <code>result<\/code><\/strong><\/td>\n<td style=\"width: 6.19209%; height: 24px;\">array<\/td>\n<td style=\"width: 79.8065%; height: 24px;\"><em>array of results<\/em><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 38.423%; height: 24px;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <code>id<\/code><\/td>\n<td style=\"width: 1.25156%;\">string<\/td>\n<td style=\"width: 61.7021%;\"><em>task identifier of the completed task<\/em><br \/>\n<strong>unique task identifier in our system in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Universally_unique_identifier\">UUID<\/a> format<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 38.423%;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <code>se<\/code><\/td>\n<td style=\"width: 1.25156%;\">string<\/td>\n<td style=\"width: 61.7021%;\"><em>search engine specified when setting the task<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 38.423%;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <code>function<\/code><\/td>\n<td style=\"width: 1.25156%;\">string<\/td>\n<td style=\"width: 61.7021%;\"><em>type of the task<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 38.423%;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <code>date_posted<\/code><\/td>\n<td style=\"width: 1.25156%;\">string<\/td>\n<td style=\"width: 61.7021%;\"><em>date when the task was posted (in the UTC format)<\/em><\/td>\n<\/tr>\n<td style=\"width: 38.423%;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <code>tag<\/code><\/td>\n<td style=\"width: 1.25156%;\">string<\/td>\n<td style=\"width: 61.7021%;\"><em>user-defined task identifier<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 38.423%;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <code>endpoint_advanced<\/code><\/td>\n<td style=\"width: 1.25156%;\">string<\/td>\n<td style=\"width: 61.7021%;\"><em>URL for collecting the results of the {{up_se_name}} {{normal_se_type}} task<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 38.423%;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <code>endpoint_html<\/code><\/td>\n<td style=\"width: 1.25156%;\">string<\/td>\n<td style=\"width: 61.7021%;\"><em>URL for collecting the results of the {{up_se_name}} {{normal_se_type}} HTML task<\/em><br \/>\nif HTML tasks are not supported in the specified endpoint, the value will be <code>null<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u200c\u200c[\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[vc_row][vc_column][vc_column_text] Get {{up_se_name}} {{normal_se_type}} Completed Tasks \u200c The &#8216;Tasks Ready&#8217; endpoint is designed to provide you with a list of completed tasks that haven&#8217;t been collected yet. If you use the Standard method without specifying the postback_url, you can receive the list of id for all completed tasks using this endpoint. Then, you can collect [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template.php","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/docs.dataforapps.com\/v3\/wp-json\/wp\/v2\/pages\/13655"}],"collection":[{"href":"https:\/\/docs.dataforapps.com\/v3\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/docs.dataforapps.com\/v3\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/docs.dataforapps.com\/v3\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.dataforapps.com\/v3\/wp-json\/wp\/v2\/comments?post=13655"}],"version-history":[{"count":7,"href":"https:\/\/docs.dataforapps.com\/v3\/wp-json\/wp\/v2\/pages\/13655\/revisions"}],"predecessor-version":[{"id":17543,"href":"https:\/\/docs.dataforapps.com\/v3\/wp-json\/wp\/v2\/pages\/13655\/revisions\/17543"}],"wp:attachment":[{"href":"https:\/\/docs.dataforapps.com\/v3\/wp-json\/wp\/v2\/media?parent=13655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}