
पायथन के लिए Hinge डेटिंग ऐप SDK, अकेले और ऊबे हुए सॉफ्टवेयर इंजीनियर्स के लिए
Hinge API के लिए अनौपचारिक Python SDK. Hinge के साथ प्रोग्रामेटिक रूप से इंटरैक्ट करें ताकि सिफारिशें प्राप्त करें, संदेश भेजें, मीडिया डाउनलोड करें और स्वचालित इंटरैक्शन करें।
इस SDK का उपयोग करने के लिए, आपको मान्य प्रमाणीकरण क्रेडेंशियल्स की आवश्यकता है। आप इन्हें .env फ़ाइल में संग्रहीत कर सकते हैं या सीधे क्लाइंट को पास कर सकते हैं।
BEARER_TOKEN: आपका JWT प्रमाणीकरण टोकन (जैसे, L2euNWN...)।SESSION_ID: वर्तमान सत्र UUID।USER_ID: आपकी अद्वितीय उपयोगकर्ता/खिलाड़ी आईडी।यदि आप नए डिवाइस लॉगिन से फ़्लैग होने के जोखिम के बिना अपने मौजूदा Hinge खाते का उपयोग करना चाहते हैं, तो आपको ऐप के नेटवर्क ट्रैफ़िक से इन मानों को निकालना होगा।
नोट: सही चर प्राप्त करने के लिए आपको यह केवल एक बार करने की आवश्यकता है। उन्हें कैप्चर करने के बाद, आप भविष्य के सत्रों के लिए SMS लॉगिन विधि का उपयोग कर सकते हैं।
prod-api.hingeaws.net या समान Hinge एंडपॉइंट्स पर HTTPS अनुरोधों का निरीक्षण करें।authorization (Bearer टोकन)x-session-idx-device-idx-install-idUser ID (अक्सर प्रतिक्रिया बॉडी में subjectId या समान के रूप में)आप SDK के माध्यम से SMS के ज़रिए लॉगिन करके नए क्रेडेंशियल्स उत्पन्न कर सकते हैं। यह एक ताज़ा लॉगिन प्रवाह करता है।
from hingesdk.client import HingeClient
# ये आईडी आपके खाते से जुड़े वास्तविक मानों से मेल खानी चाहिए।
# आप रैंडम UUID का उपयोग नहीं कर सकते; उन्हें खाते के पंजीकृत डिवाइस के अनुरूप होना चाहिए।
client = HingeClient.login_with_sms(
phone_number="+15551234567",
device_id="your_device_id_uuid",
install_id="your_install_id_uuid"
)
print(f"BEARER_TOKEN={client.auth_token}")
print(f"SESSION_ID={client.session_id}")
print(f"USER_ID={client.user_id}")
रिपॉजिटरी को क्लोन करें और पैकेज स्थापित करें:
git clone https://github.com/reedgraff/hingesdk
cd hingesdk
pip install .
यहाँ प्रमाणीकरण और उपयोगकर्ता सिफारिशें प्राप्त करने का एक न्यूनतम उदाहरण है।
import os
from hingesdk.api import HingeAPIClient
# क्रेडेंशियल्स के साथ प्रारंभ करें
client = HingeAPIClient(
auth_token=os.getenv("BEARER_TOKEN"),
session_id=os.getenv("SESSION_ID"),
user_id=os.getenv("USER_ID")
)
# सिफारिशें प्राप्त करें
recs = client.get_recommendations()
print(f"सिफारिशें अनुरोध सफलतापूर्वक प्राप्त किया गया।")
from hingesdk.client import HingeAPIClient
auth_token = 'your_auth_token'
user_id = 'your_user_id'
client = HingeAPIClient(auth_token=auth_token, user_id=user_id)
response = client.send_message(
subject_id='receiver_id',
message='नमस्ते, यह एक परीक्षण संदेश है!'
)
print(response)
from hingesdk.api import HingeAPIClient
client = HingeAPIClient(auth_token=auth_token, user_id=user_id)
recommendations = client.get_recommendations()
print(recommendations)
from hingesdk.tools import HingeTools
from hingesdk.api import HingeAPIClient
from hingesdk.media import HingeMediaClient
api_client = HingeAPIClient(auth_token=auth_token, user_id=user_id)
media_client = HingeMediaClient(auth_token=auth_token)
tools = HingeTools(api_client, media_client)
tools.download_recommendation_content(output_path='path_to_save_images')
import os
import json
from hingesdk.tools import HingeTools
from hingesdk.api import HingeAPIClient
from hingesdk.media import HingeMediaClient
auth_token = os.getenv("BEARER_TOKEN")
session_id = os.getenv("SESSION_ID")
user_id = os.getenv("USER_ID")
api_client = HingeAPIClient(
auth_token=auth_token,
session_id=session_id,
user_id=user_id
)
media_client = HingeMediaClient(auth_token=auth_token)
tools = HingeTools(api_client, media_client)
# उदाहरण: उपयोगकर्ता जानकारी प्राप्त करें
tools.create_profile_json(
source=ProfileSource.STANDOUTS,
output_file="standouts.json"
)
# उदाहरण: किसी उपयोगकर्ता को लाइक करें
with open("standouts.json", "r") as f:
profiles = json.load(f)
personData = profiles["35582109789..."]
# किसी उपयोगकर्ता के प्रश्न को लाइक करें
questionIDToLike = "5c4a346828fd883a24..."
response = api_client.like_profile(
subject_id=personData["interaction_data"]["subject_id"],
rating_token=personData["interaction_data"]["rating_token"],
prompt={
"questionId": questionIDToLike,
"response": "मैं एक साल से मियामी में हूँ और अभी भी नहीं गया (╥﹏╥)"
}
)
print(response)
# किसी उपयोगकर्ता की फ़ोटो को लाइक करें
# photoIDToLike = "2c6411ac-66e4-4194-..."
# response = api_client.like_profile(
# subject_id=personData["interaction_data"]["subject_id"],
# rating_token=personData["interaction_data"]["rating_token"],
# photo={
# "contentId": photoIDToLike,
# "comment": "तो कितने लोगों ने टिप्पणी की है कि वे पहले यहाँ आ चुके हैं?"
# }
# )
# print(response)
यह उदाहरण दर्शाता है कि कैसे सिफारिशों को स्क्रैप करें और विशिष्ट मानदंडों (जैसे शीर्ष विश्वविद्यालय) के आधार पर प्रोफाइल फ़िल्टर करें।
def find_top_50_university_students(json_file_path, age_min=18, age_max=24):
# मिलान प्रोफाइल को संग्रहीत करने के लिए सूची
matching_profiles = []
# शीर्ष 50 विश्वविद्यालयों के लिए पैटर्न का शब्दकोश (केस इनसेंसिटिव)
top_50_patterns = {
"Princeton University": [r"princeton", r"\bpu\b", r"princeton\s+university"],
"Massachusetts Institute of Technology": [r"mit", r"massachusetts\s+institute\s+of\s+technology", r"mass\s+tech"],
"Harvard University": [r"harvard", r"\bhu\b", r"harvard\s+university"],
"Stanford University": [r"stanford", r"\bsu\b", r"stanford\s+university"],
"Yale University": [r"yale", r"\byu\b", r"yale\s+university"],
"California Institute of Technology": [r"caltech", r"california\s+institute\s+of\s+technology"],
"Duke University": [r"duke", r"\bdu\b", r"duke\s+university"],
"Johns Hopkins University": [r"johns\s+hopkins", r"\bjhu\b", r"hopkins"],
"Northwestern University": [r"northwestern", r"\bnu\b", r"northwestern\s+university"],
"University of Pennsylvania": [r"upenn", r"penn", r"university\s+of\s+pennsylvania"],
"Cornell University": [r"cornell", r"\bcu\b", r"cornell\s+university"],
"University of Chicago": [r"uchicago", r"university\s+of\s+chicago", r"u\s+chicago"],
"Brown University": [r"brown", r"\bbu\b", r"brown\s+university"],
"Columbia University": [r"columbia", r"\bcu\b", r"columbia\s+university"],
"Dartmouth College": [r"dartmouth", r"\bdc\b", r"dartmouth\s+college"],
"University of California--Los Angeles": [r"ucla", r"university\s+of\s+california\s+los\s+angeles", r"uc\s+la"],
"University of California, Berkeley": [r"uc\s+berkeley", r"berkeley", r"university\s+of\s+california\s+berkeley"],
"Rice University": [r"rice", r"\bru\b", r"rice\s+university"],
"University of Notre Dame": [r"notre\s+dame", r"\bnd\b", r"university\s+of\s+notre\s+dame"],
"Vanderbilt University": [r"vanderbilt", r"\bvu\b", r"vandy"],
"Carnegie Mellon University": [r"carnegie\s+mellon", r"\bcmu\b", r"cmu"],
"University of Michigan--Ann Arbor": [r"umich", r"michigan", r"university\s+of\s+michigan"],
"Washington University in St. Louis": [r"washu", r"washington\s+university", r"wu\s+stl"],
"Emory University": [r"emory", r"\beu\b", r"emory\s+university"],
"Georgetown University": [r"georgetown", r"\bgu\b", r"georgetown\s+university"],
"University of Virginia": [r"uva", r"virginia", r"university\s+of\s+virginia"],
"University of North Carolina--Chapel Hill": [r"unc", r"chapel\s+hill", r"university\s+of\s+north\s+carolina"],
"University of Southern California": [r"usc", r"southern\s+california", r"university\s+of\s+southern\s+california"],
"University of California, San Diego": [r"ucsd", r"uc\s+san\s+diego", r"university\s+of\s+california\s+san\s+diego"],
"New York University": [r"nyu", r"new\s+york\s+university"],
"University of Florida": [r"uf", r"florida", r"university\s+of\s+florida"],
"The University of Texas--Austin": [r"ut\s+austin", r"utexas", r"university\s+of\s+texas"],
"Georgia Institute of Technology": [r"gatech", r"georgia\s+tech", r"georgia\s+institute\s+of\s+technology"],
"University of California, Davis": [r"uc\s+davis", r"ucd", r"university\s+of\s+california\s+davis"],
"University of California--Irvine": [r"uci", r"uc\s+irvine", r"university\s+of\s+california\s+irvine"],
"University of Illinois Urbana-Champaign": [r"uiuc", r"illinois", r"university\s+of\s+illinois"],
"Boston College": [r"bc", r"boston\s+college"],
"Tufts University": [r"tufts", r"\btu\b", r"tufts\s+university"],
"University of California, Santa Barbara": [r"ucsb", r"uc\s+santa\s+barbara", r"university\s+of\s+california\s+santa\s+barbara"],
"University of Wisconsin--Madison": [r"uw\s+madison", r"wisconsin", r"university\s+of\s+wisconsin"],
"Boston University": [r"bu", r"boston\s+university"],
"The Ohio State University": [r"ohio\s+state", r"osu", r"the\s+ohio\s+state\s+university"],
"Rutgers University--New Brunswick": [r"rutgers", r"ru", r"rutgers\s+university"],
"University of Maryland, College Park": [r"umd", r"maryland", r"university\s+of\s+maryland"],
"University of Rochester": [r"rochester", r"\bur\b", r"university\s+of\s+rochester"],
"Lehigh University": [r"lehigh", r"\blu\b", r"lehigh\s+university"],
"Purdue University--Main Campus": [r"purdue", r"\bpu\b", r"purdue\s+university"],
"University of Georgia": [r"uga", r"georgia", r"university\s+of\s+georgia"],
"University of Washington": [r"uw", r"washington", r"university\s+of\s+washington"],
"Wake Forest University": [r"wake\s+forest", r"\bwfu\b", r"wake"],
"Case Western Reserve University": [r"case\s+western", r"\bcwru\b", r"case"],
"Texas A&M University": [r"texas\s+a&m", r"tamu", r"a&m"],
"Virginia Tech": [r"virginia\s+tech", r"vt", r"vtech"],
"Florida State University": [r"fsu", r"florida\s+state", r"florida\s+state\s+university"],
"University of Miami": [r'umiami', r'\bum\b', r'university\s+of\s+miami']
}
try:
# JSON फ़ाइल पढ़ें
with open(json_file_path, 'r') as file:
data = json.load(file)
# प्रत्येक उपयोगकर्ता प्रोफ़ाइल के माध्यम से पुनरावृति करें
for user_id, profile in data.items():
profile_info = profile.get('profile_info', {})
# आयु सीमा जांचें (डिफ़ॉल्ट कॉन्फ़िगर करने योग्य न्यूनतम/अधिकतम)
age = profile_info.get('age', 0)
if not (age_min <= age <= age_max):
continue
# शिक्षा सूची प्राप्त करें (यदि मौजूद नहीं है तो डिफ़ॉल्ट खाली सूची)
educations = profile_info.get('educations', [])
# शीर्ष 50 विश्वविद्यालय संदर्भों के लिए प्रत्येक शिक्षा स्ट्रिंग जांचें
found_match = False
matched_university = None
for edu in educations:
if not isinstance(edu, str):
continue
# केस-इनसेंसिटिव मिलान के लिए लोअरकेस में कनवर्ट करें
edu_lower = edu.lower()
# प्रत्येक विश्वविद्यालय के पैटर्न जांचें
for university, patterns in top_50_patterns.items():
for pattern in patterns:
if re.search(pattern, edu_lower):
found_match = True
matched_university = university
break
if found_match:
break
if found_match:
break
# यदि मिलान मिला, तो प्रोफ़ाइल को परिणामों में जोड़ें
if found_match:
# छवियाँ सूची प्राप्त करें (यदि मौजूद नहीं है तो डिफ़ॉल्ट खाली सूची)
images = profile.get('images', [])
image_urls = [img.get('url', '') for img in images if img.get('url')]
matching_profiles.append({
'user_id': user_id,
'age': age,
'firstName': profile_info.get('firstName', ''),
'educations': educations,
'matched_university': matched_university,
'location': profile_info.get('location', {}).get('name', ''),
'image_urls': image_urls
})
return matching_profiles
except FileNotFoundError:
print(f"त्रुटि: फ़ाइल {json_file_path} नहीं मिली.")
return []
except json.JSONDecodeError:
print(f"त्रुटि: {json_file_path} में अमान्य JSON प्रारूप.")
return []
except Exception as e:
print(f"अप्रत्याशित त्रुटि: {str(e)}")
return []
def main():
# अपने प्रमाणीकरण टोकन के साथ क्लाइंट प्रारंभ करें
auth_token = os.getenv("BEARER_TOKEN")
session_id = os.getenv("SESSION_ID")
user_id = os.getenv("USER_ID")
api_client = HingeAPIClient(
auth_token=auth_token,
session_id=session_id,
user_id=user_id
)
media_client = HingeMediaClient(auth_token=auth_token)
tools = HingeTools(api_client, media_client)
# उदाहरण: बड़े पैमाने पर स्क्रैपिंग
# tools.scrape_recommendations_multiple(
# iterations=40, # 40 लोगों को छोड़ने से पहले अधिकतम लगता है...
# min_sleep = 20,
# max_sleep = 60,
# )
json_file_path = 'all_recommendations.json'
csv_file_path = 'university_matches.csv'
results = find_top_50_university_students(json_file_path)
print(f"{len(results)} मिलान प्रोफाइल मिले.")
# प्रत्येक छवि के लिए अलग कॉलम के साथ CSV हेडर परिभाषित करें
headers = ['timestamp', 'user_id', 'name', 'age', 'location', 'education',
'image1', 'image2', 'image3', 'image4', 'image5', 'image6']
# CSV फ़ाइल को एपेंड मोड में खोलें
with open(csv_file_path, 'a', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=headers)
# यदि फ़ाइल खाली है तो हेडर लिखें
if csvfile.tell() == 0:
writer.writeheader()
# प्रत्येक प्रोफ़ाइल को एक पंक्ति के रूप में लिखें
for profile in results:
# पंक्ति के लिए एक शब्दकोश बनाएं
row_data = {
'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'user_id': profile['user_id'],
'name': profile['firstName'],
'age': profile['age'],
'location': profile['location'],
'education': ', '.join(profile['educations'])
}
# छवि URL को अलग-अलग कॉलम में जोड़ें
for i in range(6):
image_key = f'image{i+1}'
if profile['image_urls'] and i < len(profile['image_urls']):
row_data[image_key] = profile['image_urls'][i]
else:
row_data[image_key] = ''
writer.writerow(row_data)
print(f"परिणाम {csv_file_path} में जोड़ दिए गए हैं")
SDK तार्किक मॉड्यूल में संगठित है ताकि चिंताओं को अलग किया जा सके।
hingesdk/
├── __init__.py
├── client.py # बेस HingeClient: HTTP अनुरोध, हेडर और प्रमाणीकरण को संभालता है
├── api.py # HingeAPIClient: कोर API विधियाँ (लाइक, संदेश, सिफारिशें प्राप्त करें)
├── media.py # HingeMediaClient: छवियों को डाउनलोड/प्रोसेस करने के लिए सहायक
├── tools.py # HingeTools: उच्च-स्तरीय वर्कफ़्लो (बैच स्क्रैपिंग, निर्यात)
├── models.py # Pydantic मॉडल और डेटा संरचनाएँ (यदि लागू हो)
├── exceptions.py # कस्टम अपवाद वर्ग (HingeAPIError, HingeAuthError)
└── assets/ # स्थिर संसाधन (जैसे, प्रॉम्प्ट परिभाषाएँ)
यह प्रोजेक्ट MIT लाइसेंस के तहत लाइसेंस प्राप्त है।