data_for_seo/api/keywords_data/
mod.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
mod google_ads;

use crate::{DataForSeoApiResponse, DataForSeoClient};
use serde::{Deserialize, Serialize};

pub use google_ads::*;
pub struct KeywordsDataApi<'a> {
    client: &'a DataForSeoClient,
}

impl DataForSeoClient {
    /// https://docs.dataforseo.com/v3/keywords_data/overview/?bash
    pub fn keywords_data(&self) -> KeywordsDataApi {
        KeywordsDataApi { client: self }
    }
}

impl KeywordsDataApi<'_> {
    pub async fn locations(&self) -> DataForSeoApiResponse<KeywordsDataApiLocation> {
        self.client
            .http_get("https://api.dataforseo.com/v3/keywords_data/locations", &{})
            .await
    }
    pub async fn locations_se(&self, se: &str) -> DataForSeoApiResponse<KeywordsDataApiLocation> {
        self.client
            .http_get(
                format!(
                    "https://api.dataforseo.com/v3/keywords_data/{}/locations",
                    se
                )
                .as_str(),
                &{},
            )
            .await
    }
    pub async fn locations_country(
        &self,
        country: &str,
    ) -> DataForSeoApiResponse<KeywordsDataApiLocation> {
        self.client
            .http_get(
                format!(
                    "https://api.dataforseo.com/v3/keywords_data/locations/{}",
                    country
                )
                .as_str(),
                &{},
            )
            .await
    }
    pub async fn locations_country_se(
        &self,
        se: &str,
        country: &str,
    ) -> DataForSeoApiResponse<KeywordsDataApiLocation> {
        self.client
            .http_get(
                format!(
                    "https://api.dataforseo.com/v3/keywords_data/{}/locations/{}",
                    se, country
                )
                .as_str(),
                &{},
            )
            .await
    }
    pub async fn task_ready(&self) -> DataForSeoApiResponse<KeywordsDataApiTaskReadyResult> {
        self.client
            .http_get(
                "https://api.dataforseo.com/v3/keywords_data/tasks_ready",
                &{},
            )
            .await
    }
    pub async fn task_ready_se(
        &self,
        se: &str,
    ) -> DataForSeoApiResponse<KeywordsDataApiTaskReadyResult> {
        self.client
            .http_get(
                format!(
                    "https://api.dataforseo.com/v3/keywords_data/{}/tasks_ready",
                    se
                )
                .as_str(),
                &{},
            )
            .await
    }
    pub async fn task_fixed(&self) -> DataForSeoApiResponse<KeywordsDataApiTaskReadyResult> {
        self.client
            .http_get(
                "https://api.dataforseo.com/v3/keywords_data/tasks_fixed",
                &{},
            )
            .await
    }
    pub async fn task_fixed_se(
        &self,
        se: &str,
    ) -> DataForSeoApiResponse<KeywordsDataApiTaskReadyResult> {
        self.client
            .http_get(
                format!(
                    "https://api.dataforseo.com/v3/keywords_data/{}/tasks_fixed",
                    se
                )
                .as_str(),
                &{},
            )
            .await
    }
}

#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct KeywordsDataApiTaskReadyResult {
    id: Option<String>,
    se: Option<String>,
    se_type: Option<String>,
    date_posted: Option<String>,
    tag: Option<String>,
    endpoint_regular: Option<String>,
    endpoint_advanced: Option<String>,
    endpoint_html: Option<String>,
}

#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct KeywordsDataApiLocation {
    pub location_code: Option<i32>,
    pub location_name: Option<String>,
    pub location_code_parent: Option<i32>,
    pub country_iso_code: Option<String>,
    pub location_type: Option<String>,
}