Git Product home page Git Product logo

sl_test's Introduction

При решении исходим из того, что валидация e-mail не требуется.

Приведены три варианта решения задачи (в том порядке, в котором они посещали голову):

  1. grav_changer - Простая замена ключей прямо в строке, с помощью функции replace.

    sl_test/test.py

    Lines 11 to 29 in ae26267

    def grav_changer(email):
    # Получаем MD5 хэш с помощью hashlib
    email_hash = hashlib.md5(email.encode('utf-8')).hexdigest()
    #print(email_hash)
    # Направляем запрос, чтобы получить .json от Gravatar
    r = requests.get(url+email_hash+'.json')
    print(r.text)
    # Простая замена работая со строкой:
    r_changed = r.text.replace('hash', 'email_hash').replace('profileUrl', 'url').replace('preferredUsername', 'alias').replace('thumbnailUrl','thumb').replace('name', 'person').replace('currentLocation', 'location')
    r_jsoned = json.loads(r_changed)
    #print(r_jsoned)
    # Добавляем e-mail, которого нет в явном виде в ответе от Gravatar
    r_jsoned['entry'][0]['email']=email
    #print(r_jsoned['entry'])
    # Собираем всё в требуемом виде
    res = {"result":r_jsoned['entry'][0]}
    return res

  2. grav_changer_json - C помощью лямбда функции, берущей ключи из словаря (changes), в котором дано соответствие {'старый':'новый'}.

    sl_test/test.py

    Lines 31 to 57 in ae26267

    # Более сложная замена с json (замену нельзя производить сразу в самом словаре -
    # нужно работать с его копией, иначе при смене ключа Python справедливо будет
    # ругаться):
    def grav_changer_json(email):
    # Аналогично получаем хэш и отправляем запрос
    email_hash = hashlib.md5(email.encode('utf-8')).hexdigest()
    r = requests.get(url+email_hash+'.json')
    # загружаем json для работы с ним
    r_jsoned = json.loads(r.text)
    # Составляем словарик с тем, что на что меняется:
    changes = {'id':'id',
    'photos':'photos',
    'emails':'emails',
    'accounts':'accounts',
    'urls':'urls',
    'requestHash':'requestHash',
    'displayName':'displayName',
    'hash':'email_hash',
    'profileUrl':'url',
    'preferredUsername':'alias',
    'thumbnailUrl':'thumb',
    'name' : 'person',
    'currentLocation' : 'location'}
    result = {'result':dict((changes[key], value) for (key,value) in r_jsoned['entry'][0].items())}
    #Не забываем добавить 'email'
    result['result']['email']=email
    return result

  3. grav_changer_ordered - для жесткого соответствия порядку ключей в ответе, выдаваемом функцией необходимому нам порядку.

    sl_test/test.py

    Lines 59 to 75 in ae26267

    # Если нас интересует чёткий порядок ключей в .json (мы работаем с версией
    # Python > 3.7, словарь у нас упорядочен и требования к порядку ключей жесткие)
    def grav_changer_ordered(email):
    # Аналогично получаем хэш и отправляем запрос
    email_hash = hashlib.md5(email.encode('utf-8')).hexdigest()
    r = requests.get(url+email_hash+'.json')
    # загружаем json для работы с ним
    r_jsoned = json.loads(r.text)
    # А теперь прямо указываем что и куда ставим:
    res = {'result':{
    'id':r_jsoned['entry'][0]['id'],
    'email':email,
    'email_hash':r_jsoned['entry'][0]['hash'],
    'person':r_jsoned['entry'][0]['name'],
    'url':r_jsoned['entry'][0]['profileUrl']}}
    # ...и так далее.
    return res

Третий вариант, на мой взгляд, позволяет добиться наилучшего результата и его можно считать наиболее полноценным решением.

sl_test's People

Contributors

tqpqr avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.