File size: 3,049 Bytes
b2974e8 7119782 7e21d9b 7119782 7a83db7 7e21d9b 7a83db7 7e21d9b d0479df 7e21d9b d0479df 7e21d9b 7119782 7e21d9b d964699 7588655 e5bd9f1 7119782 d964699 7119782 d0479df 7119782 7a83db7 7119782 7a83db7 7119782 37cf3dc 7119782 37cf3dc 7119782 e5bd9f1 7588655 d964699 37cf3dc 7119782 37cf3dc |
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 |
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 with filters as a list of lists
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)
# 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
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()])
if is_lost:
filters.append(["is_lost", "=", is_lost])
if dofollow:
filters.append(["dofollow", "=", dofollow])
filters.append(["backlink_spam_score", "<=", backlink_spam_score])
filters.append(["page_from_language", "=", page_from_language])
# 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
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:
# Display the DataFrame in the second column
with col2:
st.header("Output")
st.dataframe(df)
# Reset functionality
if reset_button:
st.experimental_rerun() |