Привет мир! Где бы вы ни были, я надеюсь, что вы здоровы и чувствуете себя хорошо.

В сегодняшней статье я добавлю несколько небольших обновлений в свой клиент Twitter, который я буду называть memento mori. Во время вечерней прогулки ко мне внезапно пришло откровение: красота создания собственный проект заключается в том, что он никогда не заканчивается. Всегда будут границы, которые можно раздвинуть, и новые функции, к которым можно добавить.

Когда меня поразило это вдохновение, я подумал о Minecraft.

Впервые я поиграл в Minecraft в декабре 2012 года. Примерно в то время Minecraft был еще в версии 1.2.x. Не было лошадей, на которых можно было прыгать. Вы можете спамить щелчком меча, не беспокоясь о каком-либо механизме перезарядки атаки. Грабителей не существовало, и рыбы не существовало. Короче говоря, Minecraft был простым.

Возвращаясь к воспоминаниям и просматривая историю версий Minecraft, я наткнулся на страницу, которая излагает основную идею сегодняшней статьи:

Minecraft никогда не закончен; он постоянно развивается дальше. Обновление — это набор изменений в официальных игровых клиентах Minecraft, периодически выпускаемых Mojang AB.

Учитывая то, что Minecraft сам по себе является произведением искусства, я считаю, что приведенное выше предложение также применимо к любому творческому стремлению, к которому стремится мужчина или женщина. Проще говоря, нет конца созданию вещей; а «конец» обычно означает, что вы, создатель, нашли другой проект, над которым можно поработать и посвятить ему свое сердце.

Теперь давайте приступим к делу и обновим несколько фрагментов моего кода из вчерашнего проекта!

Добавление сообщения о состоянии

Вспомним, что во вчерашнем коде последние несколько строк выглядят так:

r = request.post(url, params=tweet, auth=auth)
print(r.status_code)

Прежде чем я добавил print(r.status_code), я сначала написал print(r.text). Основная цель этих двух операторов печати — проинформировать пользователя (меня), что твит был получен API Твиттера и успешно опубликован в моей учетной записи.

Сначала я написал эти операторы печати в качестве тестовой точки отсчета, чтобы увидеть, какой этап моего кода работает, а какой нет. Очень важно писать небольшие тестовые примеры, даже если ваш проект не настолько сложен, как корпоративное программное обеспечение. Будь то опечатка в URL-адресе API или неверные потребительские ключи, написание этих операторов печати для просмотра сообщения об ошибке действительно полезно.

Основная функция print(r.text) — просмотреть ответ, полученный от API Twitter. Хотя эта печать r.text служит своей цели, она не очень эффективна, поскольку ответное сообщение обычно состоит из 10 строк кода JSON. Вот пример (предупреждение о длинном коде):

{
  "created_at": "Wed Oct 10 20:19:24 +0000 2018",
  "id": 1050118621198921700,
  "id_str": "1050118621198921728",
  "text": "To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm",
  "source": "<a href="http://twitter.com" rel="nofollow">Twitter Web Client</a>",
  "truncated": true,
  "in_reply_to_status_id": null,
  "in_reply_to_status_id_str": null,
  "in_reply_to_user_id": null,
  "in_reply_to_user_id_str": null,
  "in_reply_to_screen_name": null,
  "user": {
    "id": 6253282,
    "id_str": "6253282",
    "name": "Twitter API",
    "screen_name": "TwitterAPI",
    "location": "San Francisco, CA",
    "url": "https://developer.twitter.com",
    "description": "The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.",
    "translator_type": "null",
    "derived": {
      "locations": [
        {
          "country": "United States",
          "country_code": "US",
          "locality": "San Francisco",
          "region": "California",
          "sub_region": "San Francisco County",
          "full_name": "San Francisco, California, United States",
          "geo": {
            "coordinates": [
              -122.41942,
              37.77493
            ],
            "type": "point"
          }
        }
      ]
    },
    "protected": false,
    "verified": true,
    "followers_count": 6172196,
    "friends_count": 12,
    "listed_count": 13003,
    "favourites_count": 31,
    "statuses_count": 3650,
    "created_at": "Wed May 23 06:01:13 +0000 2007",
    "utc_offset": null,
    "time_zone": null,
    "geo_enabled": false,
    "lang": "en",
    "contributors_enabled": false,
    "is_translator": null,
    "profile_background_color": "null",
    "profile_background_image_url": "null",
    "profile_background_image_url_https": "null",
    "profile_background_tile": null,
    "profile_link_color": "null",
    "profile_sidebar_border_color": "null",
    "profile_sidebar_fill_color": "null",
    "profile_text_color": "null",
    "profile_use_background_image": null,
    "profile_image_url": "null",
    "profile_image_url_https": "https://pbs.twimg.com/profile_images/942858479592554497/BbazLO9L_normal.jpg",
    "profile_banner_url": "https://pbs.twimg.com/profile_banners/6253282/1497491515",
    "default_profile": false,
    "default_profile_image": false,
    "following": null,
    "follow_request_sent": null,
    "notifications": null
  },
  "geo": null,
  "coordinates": null,
  "place": null,
  "contributors": null,
  "is_quote_status": false,
  "extended_tweet": {
    "full_text": "To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin tone modifiers 👍🏻👍🏽👍🏿. This is now reflected in Twitter-Text, our Open Source library. nnUsing Twitter-Text? See the forum post for detail: https://t.co/Nx1XZmRCXA",
    "display_text_range": [
      0,
      277
    ],
    "entities": {
      "hashtags": [],
      "urls": [
        {
          "url": "https://t.co/Nx1XZmRCXA",
          "expanded_url": "https://twittercommunity.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607",
          "display_url": "twittercommunity.com/t/new-update-t…",
          "unwound": {
            "url": "https://twittercommunity.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607",
            "status": 200,
            "title": "New update to the Twitter-Text library: Emoji character count",
            "description": "Over the years, we have made several updates to the way that people can communicate on Twitter. One of the more notable changes made last year was to increase the number of characters per Tweet from 140 to 280 characters. Today, we continue to expand people’s ability to express themselves by announcing a change to the way that we count emojis. Due to the differences in the way written text and emojis are encoded, many emojis (including emojis where you can apply gender and skin tone) have count..."
          },
          "indices": [
            254,
            277
          ]
        }
      ],
      "user_mentions": [],
      "symbols": []
    }
  },
  "quote_count": 0,
  "reply_count": 0,
  "retweet_count": 0,
  "favorite_count": 0,
  "entities": {
    "hashtags": [],
    "urls": [
      {
        "url": "https://t.co/MkGjXf9aXm",
        "expanded_url": "https://twitter.com/i/web/status/1050118621198921728",
        "display_url": "twitter.com/i/web/status/1…",
        "indices": [
          117,
          140
        ]
      }
    ],
    "user_mentions": [],
    "symbols": []
  },
  "favorited": false,
  "retweeted": false,
  "possibly_sensitive": false,
  "filter_level": "low",
  "lang": "en"
}

Даже копирование и вставка ответного сообщения из документации Twitter само по себе является рутиной.

Из-за того, что ответное сообщение было слишком длинным, я решил изменить заявление и распечатать код состояния, полученный от сервера. Я могу добиться этого, напечатав r.status_code вместо r.text. Если я получил ответ от сервера с подробным описанием того, что мой твит был успешно отправлен, то я получу простой код 200 — это будет точка отсчета, чтобы сообщить мне, что мой твит был отправлен.

Тем не менее, наличие 200 в качестве сообщения об «успехе» кажется несколько странным и не совсем удобным для пользователя. Чтобы решить эту проблему, я реализовал простую логику «если-то», которая будет печатать гораздо более дружественное сообщение, если я получу код 200. Код выглядит следующим образом:

if r.status_code == 200:
    print("Your Tweet was successfully sent!")
else:
    print("Your Tweet was not sent!")

Приведенный выше код все еще находится в своей простейшей форме. Во время написания этого кода я понял, что могу добавить в него больше обновлений, таких как правильная обработка ошибок. Это позволит пользователю самостоятельно диагностировать проблему, так как отсутствие кода 200 может означать, что его интернет не работает, или его текст содержит более 280 символов.

Вывод

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