File size: 3,184 Bytes
b2974e8
7119782
 
7e21d9b
7119782
7a83db7
7e21d9b
7a83db7
7e21d9b
 
 
 
 
 
d743cd0
7e21d9b
 
 
 
 
d0479df
7e21d9b
7119782
7e21d9b
 
 
 
d743cd0
 
 
 
d964699
 
7588655
 
e5bd9f1
 
 
 
 
 
 
 
7119782
d964699
 
7119782
d743cd0
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
91
92
93
94
95
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
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()