Skip to main content

data_for_seo/api/domain_analytics/
mod.rs

1use crate::entity::{DomainAnalyticsApiErrorItem, DomainAnalyticsApiIdList};
2use crate::{DataForSeoApiResponse, DataForSeoClient};
3use serde::{Deserialize, Serialize};
4
5mod technologies;
6mod whois;
7
8pub use technologies::*;
9pub use whois::*;
10
11/// Entry point for the [Domain Analytics API](https://docs.dataforseo.com/v3/domain_analytics/).
12pub struct DomainAnalyticsApi<'a> {
13    client: &'a DataForSeoClient,
14}
15
16impl DataForSeoClient {
17    /// Returns the Domain Analytics API builder.
18    pub fn domain_analytics(&self) -> DomainAnalyticsApi<'_> {
19        DomainAnalyticsApi { client: self }
20    }
21}
22
23impl DomainAnalyticsApi<'_> {
24    /// Returns the list of task IDs completed within the requested time range.
25    /// See <https://docs.dataforseo.com/v3/domain_analytics/id_list/>.
26    pub async fn id_list(
27        &self,
28        data: Vec<DomainAnalyticsApiIdListPost>,
29    ) -> DataForSeoApiResponse<DomainAnalyticsApiIdList> {
30        self.client
31            .http_post("/v3/domain_analytics/id_list", &data)
32            .await
33    }
34
35    /// Returns tasks that responded with an error within the last 7 days.
36    /// See <https://docs.dataforseo.com/v3/domain_analytics/errors/>.
37    pub async fn errors(
38        &self,
39        data: Vec<DomainAnalyticsApiErrorsPost>,
40    ) -> DataForSeoApiResponse<DomainAnalyticsApiErrorItem> {
41        self.client
42            .http_post("/v3/domain_analytics/errors", &data)
43            .await
44    }
45}
46
47/// Request body for the `id_list` endpoint.
48#[derive(Debug, Default, Serialize, Deserialize, Clone)]
49pub struct DomainAnalyticsApiIdListPost {
50    /// Start of the range in UTC (`yyyy-mm-dd hh-mm-ss +00:00`).
51    pub datetime_from: String,
52    /// End of the range in UTC (`yyyy-mm-dd hh-mm-ss +00:00`).
53    pub datetime_to: String,
54    /// Maximum number of task IDs to return (default 1000, max 1000).
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub limit: Option<i32>,
57    /// Offset in the results array (default 0).
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub offset: Option<i32>,
60    /// Sort direction by execution time: `asc` (default) or `desc`.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub sort: Option<String>,
63    /// Whether to include original request metadata in the response.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub include_metadata: Option<bool>,
66}
67
68impl DomainAnalyticsApiIdListPost {
69    /// Creates a request for the given UTC datetime range (`yyyy-mm-dd hh-mm-ss +00:00`).
70    pub fn new(datetime_from: String, datetime_to: String) -> DomainAnalyticsApiIdListPost {
71        DomainAnalyticsApiIdListPost {
72            datetime_from,
73            datetime_to,
74            ..Default::default()
75        }
76    }
77}
78
79/// Request body for the `errors` endpoint.
80#[derive(Debug, Default, Serialize, Deserialize, Clone)]
81pub struct DomainAnalyticsApiErrorsPost {
82    /// Maximum number of errored tasks to return (default 1000, max 1000).
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub limit: Option<i32>,
85    /// Offset in the results array (default 0).
86    #[serde(skip_serializing_if = "Option::is_none")]
87    pub offset: Option<i32>,
88    /// Restrict results to a specific API function (e.g. `domain_analytics/task_get`).
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub filtered_function: Option<String>,
91    /// Start of the range in UTC (`yyyy-mm-dd hh-mm-ss +00:00`), last 7 days only.
92    #[serde(skip_serializing_if = "Option::is_none")]
93    pub datetime_from: Option<String>,
94    /// End of the range in UTC (`yyyy-mm-dd hh-mm-ss +00:00`), last 7 days only.
95    #[serde(skip_serializing_if = "Option::is_none")]
96    pub datetime_to: Option<String>,
97}
98
99impl DomainAnalyticsApiErrorsPost {
100    /// Creates an empty request (all filters optional).
101    pub fn new() -> DomainAnalyticsApiErrorsPost {
102        DomainAnalyticsApiErrorsPost::default()
103    }
104}