File size: 3,761 Bytes
b2974e8 7119782 7e21d9b 7119782 7a83db7 7e21d9b 7a83db7 7e21d9b d743cd0 7e21d9b d0479df 7e21d9b 7119782 7e21d9b d743cd0 d964699 7588655 e5bd9f1 7119782 d964699 7119782 d743cd0 7119782 7a83db7 7119782 7a83db7 ba3ff9a 7119782 ba3ff9a 7119782 b7d9073 ba3ff9a 7119782 b7d9073 ba3ff9a 7119782 b7d9073 ba3ff9a b7d9073 ba3ff9a b7d9073 7119782 37cf3dc 7119782 bc5df64 37cf3dc 7119782 e5bd9f1 7588655 a625ffd bc5df64 3dbc3bb 7119782 ba3ff9a |
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 |
import streamlit as st
import pandas as pd
import requests
import base64
def get_backlinks(api_login, api_key, target_url, filters):
# Encoding credentials
encoded_credentials = base64.b64encode(f"{api_login}:{api_key}".encode()).decode()
# Setting headers with Basic Authentication
headers = {
'Authorization': f'Basic {encoded_credentials}'
}
# Prepare post data
post_data = {
0: {
"target": target_url,
"limit": 1000,
"mode": "as_is",
"filters": filters
}
}
# Making the API request
response = requests.post("https://api.dataforseo.com/v3/backlinks/backlinks/live", json=post_data, headers=headers)
# Log the full response for debugging
st.text("API Response:")
st.json(response.json()) # This will display the full JSON response in the Streamlit app
# Check if the response contains 'results' key
if response.status_code == 200 and 'results' in response.json():
# Extract the results
results = response.json()['results']
# Check if results are not empty
if results:
# Convert results to DataFrame
df = pd.DataFrame(results)
return df
else:
st.error("Received empty data from API.")
return None
else:
error_message = response.json().get('status_message', 'No specific error message provided')
st.error(f"Error: Code: {response.status_code} Message: {error_message}")
return None
# Streamlit layout
st.sidebar.title("DataForSEO API Parameters")
api_login = st.sidebar.text_input("API Login", value="[email protected]")
api_key = st.sidebar.text_input("API Key", type="password")
# Filters input
url_from_not_contain = st.sidebar.text_input("URL from does not contain (comma-separated)")
is_lost = st.sidebar.checkbox("Is Lost", value=False)
dofollow = st.sidebar.checkbox("Dofollow", value=True)
backlink_spam_score = st.sidebar.slider("Backlink Spam Score ≤", 0, 100, 10)
page_from_language = st.sidebar.selectbox("Page From Language", ['en', 'other'])
# Prepare filters for API call
filters = []
if url_from_not_contain:
for url in url_from_not_contain.split(','):
filters.append(["url_from", "not_like", url.strip()])
filters.append("and")
if is_lost:
filters.append(["is_lost", "=", is_lost])
filters.append("and")
if dofollow:
filters.append(["dofollow", "=", dofollow])
filters.append("and")
filters.append(["backlink_spam_score", "<=", backlink_spam_score])
filters.append("and")
filters.append(["page_from_language", "=", page_from_language])
# Remove the last "and" if it's the last element
if filters and filters[-1] == "and":
filters.pop()
# Main app layout
col1, col2 = st.columns(2)
with col1:
st.header("Input")
target_url = st.text_input("Enter the target URL") # Define target_url here
with col2:
st.header("Output")
# Placeholder for the download link
download_placeholder = st.empty()
generate_button = st.sidebar.button("Generate All")
reset_button = st.sidebar.button("Reset")
# Generate CSV and download button
if generate_button and target_url:
df = get_backlinks(api_login, api_key, target_url, filters)
if df is not None:
# Convert DataFrame to CSV
csv = df.to_csv(index=False)
# Convert CSV to a string
b64 = base64.b64encode(csv.encode()).decode()
href = f'<a href="data:file/csv;base64,{b64}" download="backlinks.csv">Download CSV file</a>'
# Display the download link in the placeholder
download_placeholder.markdown(href, unsafe_allow_html=True)
# Reset functionality
if reset_button:
st.experimental_rerun()
|