Wpis z mikrobloga

Jako, że miałem więcej czasu to wreszcie przysiadłem i doszedłem do ładu z #wykopapi
Okazało się, że problem z hashowaniem był taki, że gdzieś przy stringu dodałem o jeden apostrof za dużo i cały czas miałem response jako nieprawidłowy klucz - w sensie suma md5.
Kod, który teraz działa:

Na początku przy użyciu: secret, klucz, połączenie (te dane są na karcie z aplikacją) generuje userkey:

W moim pliku accessdata.py mam taki słownik

secretkey = 'secret'
apikey = 'klucz'
userkey ='połączenie'
login = '1001001'

params = {"secret":secretkey,
"login":login,
"appkey":apikey,
"acckey":userkey}

Nastepnie kodem odczytuję userkey - ja sobie nazywam go tokenem:

import hashlib
import logging
import requests
import json
from accessdata import params

def signdata(str2hash):
headers ={}
hashed = hashlib.md5(str2hash.encode())
headers = {'apisign': hashed.hexdigest()}
return headers

def gettoken(logindata):
url = f"[https://a2.wykop.pl/Login/Index/appkey/](https://a2.wykop.pl/Login/Index/appkey/){logindata['appkey']}/"
tohash = f"{logindata['secret']}{url}{logindata['login']},{logindata['acckey']}"
data = {'login': logindata['login'], 'accountkey': logindata['acckey']}

try:
r = requests.post(url, data=data, headers=signdata(tohash))
content = r.json()
print(" json returned: ")
print(content)
print()
userkey = content['data']['userkey']
print(f'userkey token => {userkey}')
except Exception as e:
userkey = 'err'
logging.error(f'{e},{content}')
return userkey, content`

token, content = gettoken(params)
accesstoken = {'token':token}

with open('token.json', 'w') as f:
json.dump(accesstoken, f)
f.close()

i dalej innym kodem:

import hashlib
import requests
from accessdata import secretkey, apikey

with open('token.json', 'r') as f:
token = json.loads(f.read())['token']
f.close()

def headers(str2hash):
hashed = hashlib.md5(str2hash.encode())
return {'apisign':hashed.hexdigest()}

def postentry(secretkey, apikey, token):
data = {
'body': f'''Wpis dodany przez API => {datetime.now().strftime("%A, %Y.%m.%d %H:%M")}'''}
urlentry = f'''[https://a2.wykop.pl/Entries/Add/appkey/](https://a2.wykop.pl/Entries/Add/appkey/){apikey}/userkey/{token}/'''
head = headers(f'''{secretkey}{urlentry}{data['body']}''')
head['content-type'] = 'application/x-www-form-urlencoded'
#head['data'] = 'full'
r = requests.post(urlentry, headers=head, data=data)
return r.content

Kod może nie jest najlepszej jakości. Ale chciałem żeby działał ( ͡ ͜ʖ ͡) bo już mnie to bardzo irytowało, że zwyczajnie nie mogę tego zrobić. Oczywiście string do body w funkcji post
entry należało by dać jako parametr wejściowy ale tak jak napisałem zmienię to już później.
Mam nadzieję, że komuś się to przyda. Dodam tag #python jako, że kod jest w tym języku.
1001001 - Jako, że miałem więcej czasu to wreszcie przysiadłem i doszedłem do ładu z ...

źródło: comment_1636016589gFJiLyvAtrlkOw8AC12yQB.jpg

Pobierz
  • 3