Update app.py
Browse files
app.py
CHANGED
@@ -8,20 +8,13 @@ from io import StringIO
|
|
8 |
import csv
|
9 |
|
10 |
def get_backlinks(api_login, api_key, target_url, filters):
|
11 |
-
|
12 |
-
|
13 |
-
'Authorization': f'Basic {encoded_credentials}'
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
"limit": 1000,
|
19 |
-
"mode": "as_is",
|
20 |
-
"filters": filters
|
21 |
-
}
|
22 |
-
}
|
23 |
-
response = requests.post("https://api.dataforseo.com/v3/backlinks/backlinks/live", json=post_data, headers=headers)
|
24 |
-
if response.status_code == 200:
|
25 |
response_data = response.json()
|
26 |
if 'tasks' in response_data:
|
27 |
task_result = response_data['tasks'][0]['result']
|
@@ -35,9 +28,8 @@ def get_backlinks(api_login, api_key, target_url, filters):
|
|
35 |
else:
|
36 |
st.error(f"No 'tasks' key in response JSON. Full response: {response_data}")
|
37 |
return None
|
38 |
-
|
39 |
-
|
40 |
-
st.error(f"Error: Code: {response.status_code} Message: {error_message}")
|
41 |
return None
|
42 |
|
43 |
def convert_df_to_csv(df):
|
@@ -139,24 +131,8 @@ if reset:
|
|
139 |
st.session_state.clear()
|
140 |
|
141 |
row_count = st.session_state.get("row_count", 1)
|
142 |
-
for i in range(row_count):
|
143 |
-
cols = st.columns(2)
|
144 |
-
target_url_key = f"target_url_{i}"
|
145 |
-
target_url = cols[0].text_input(f"Enter the target URL {i + 1}", key=target_url_key)
|
146 |
-
df_key = f"df_{i}"
|
147 |
-
df = st.session_state.get(df_key)
|
148 |
-
if df is not None:
|
149 |
-
csv = convert_df_to_csv(df)
|
150 |
-
cols[1].download_button(
|
151 |
-
label=f"Download data as CSV for URL {i + 1}",
|
152 |
-
data=csv,
|
153 |
-
file_name=f'backlinks_{i + 1}.csv',
|
154 |
-
mime='text/csv',
|
155 |
-
)
|
156 |
-
elif df is None and generate_button:
|
157 |
-
cols[1].error(f"Failed to generate CSV for URL {i + 1}: No data returned from the API or data processing error.")
|
158 |
|
159 |
-
generate_button = st.sidebar.button("Generate All")
|
160 |
|
161 |
if generate_button:
|
162 |
jobs = Queue()
|
@@ -180,3 +156,20 @@ if generate_button:
|
|
180 |
while not results.empty():
|
181 |
url_id, df = results.get()
|
182 |
st.session_state[f"df_{url_id}"] = df
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
import csv
|
9 |
|
10 |
def get_backlinks(api_login, api_key, target_url, filters):
|
11 |
+
try:
|
12 |
+
encoded_credentials = base64.b64encode(f"{api_login}:{api_key}".encode()).decode()
|
13 |
+
headers = {'Authorization': f'Basic {encoded_credentials}'}
|
14 |
+
post_data = {0: {"target": target_url, "limit": 1000, "mode": "as_is", "filters": filters}}
|
15 |
+
response = requests.post("https://api.dataforseo.com/v3/backlinks/backlinks/live", json=post_data, headers=headers)
|
16 |
+
response.raise_for_status() # Raise an exception for HTTP errors
|
17 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
response_data = response.json()
|
19 |
if 'tasks' in response_data:
|
20 |
task_result = response_data['tasks'][0]['result']
|
|
|
28 |
else:
|
29 |
st.error(f"No 'tasks' key in response JSON. Full response: {response_data}")
|
30 |
return None
|
31 |
+
except requests.RequestException as e:
|
32 |
+
st.error(f"Request error: {e}")
|
|
|
33 |
return None
|
34 |
|
35 |
def convert_df_to_csv(df):
|
|
|
131 |
st.session_state.clear()
|
132 |
|
133 |
row_count = st.session_state.get("row_count", 1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
|
135 |
+
generate_button = st.sidebar.button("Generate All") # Define generate_button before its first use
|
136 |
|
137 |
if generate_button:
|
138 |
jobs = Queue()
|
|
|
156 |
while not results.empty():
|
157 |
url_id, df = results.get()
|
158 |
st.session_state[f"df_{url_id}"] = df
|
159 |
+
|
160 |
+
for i in range(row_count):
|
161 |
+
cols = st.columns(2)
|
162 |
+
target_url_key = f"target_url_{i}"
|
163 |
+
target_url = cols[0].text_input(f"Enter the target URL {i + 1}", key=target_url_key)
|
164 |
+
df_key = f"df_{i}"
|
165 |
+
df = st.session_state.get(df_key)
|
166 |
+
if df is not None:
|
167 |
+
csv = convert_df_to_csv(df)
|
168 |
+
cols[1].download_button(
|
169 |
+
label=f"Download data as CSV for URL {i + 1}",
|
170 |
+
data=csv,
|
171 |
+
file_name=f'backlinks_{i + 1}.csv',
|
172 |
+
mime='text/csv',
|
173 |
+
)
|
174 |
+
elif df is None and generate_button:
|
175 |
+
cols[1].error(f"Failed to generate CSV for URL {i + 1}: No data returned from the API or data processing error.")
|