在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Twitter API從特定用戶獲取推文

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-29 16:31 ? 次閱讀

概述

此指南顯示了如何使用Twitter API從特定用戶獲取推文(但是您可以做很多事情)。舉一個具體的例子,它將用于定期從@codewisdom獲取最新的tweet,這是一個tweet來自軟件行業的引用的feed。我們將獲取這些推文,并將其顯示在PyPortal上。

Adafruit PyPortal-CircuitPython Powered Internet Display

產品ID:4116

PyPortal是我們易于使用的IoT設備,可讓您在數分鐘內為“物聯網”創建所有東西。制作自定義觸摸屏界面。..

$ 54.95

進貨

添加到購物車

粉紅色和紫色編織USB A至Micro B電纜-2米長

產品ID:4148

這條電纜具有粉紅色和紫色Blinka編織圖案,非常適合用于時尚!首先,我們來談談覆蓋層和包覆成型。我們將這些顏色制成自定義顏色,。..

$ 3.95

入庫存

添加到購物車

其他工具和材料

您可能想為PyPortal事件倒計時時鐘創建可選的桌面支架。為此,您需要:

3D打印機

細絲

PyPortal支架模型文件

M3支腳和螺釘

如果您無權使用3D打印機,則可以選擇使用在線服務(例如3D集線器)按需為您打印。

電路場螺栓固定套件

產品ID:3816

您有Circuit Playground Express,但您需要將其安裝到迷人的紙板機器人朋友身上,是嗎?如果您。..

$ 3.95

進貨

添加到購物車

安裝CircuitPython

CircuitPython是MicroPython的派生版,旨在簡化低成本微控制器上的實驗和教學。它不需要任何前期桌面軟件下載,因此比以往任何時候都更容易獲得原型。只需復制并編輯 CIRCUITPY “閃存”驅動器上的文件即可進行迭代。

以下說明將向您展示如何安裝CircuitPython。如果您已經安裝了CircuitPython,但希望對其進行更新或重新安裝,則同樣的步驟也適用!

設置CircuitPython快速入門!

請遵循以下快速逐步操作以獲取超快速的Python功能:)

通過CircuitPython.org為該板下載最新版本的CircuitPython

點擊上面的鏈接,為PyPortal下載最新版本的CircuitPython。

下載并將其保存到您的桌面(或方便的任何地方)。

使用已知良好的USB電纜將PyPortal插入計算機。

A很多人最終使用僅可充電的USB電纜,這非常令人沮喪!因此,請確保您擁有知道對數據同步有用的USB電纜。

雙擊中間頂部頂部的重置按鈕(洋紅色箭頭)在板上,您將看到NeoPixel RGB LED(綠色箭頭)變為綠色。如果它變成紅色,請檢查USB電纜,嘗試使用另一個USB端口,等等。注意:USB接口旁邊的紅色小LED指示燈將呈紅色閃爍。沒關系!

如果第一次雙擊不起作用,請重試。有時可能需要一些嘗試才能使節奏正確!

您將看到一個名為 PORTALBOOT 。

將 adafruit-circuitpython-pyportal- .uf2 文件拖到 PORTALBOOT。

LED將閃爍。然后, PORTALBOOT 驅動器將消失,并且將出現一個名為 CIRCUITPY 的新磁盤驅動器。

如果未在板上添加任何代碼,唯一存在的文件是 boot_out.txt 。這是絕對正常的!是時候添加您的 code.py 并開始使用它了!

就這樣,您完成了! :)

PyPortal默認文件

單擊下面的按鈕,下載PyPortal附帶的文件的zip。

PyPortal默認文件

PyPortal CircuitPython設置

要在CircuitPython中使用PyPortal的所有出色功能,必須首先安裝許多庫。本頁涵蓋了該過程。

Adafruit CircuitPython捆綁包

下載Adafruit CircuitPython庫捆綁包。您可以在此處找到最新版本:

最新的Adafruit CircuitPython庫包

下載 adafruit-circuitpython-bundle-4。 x-mpy-*。zip 捆綁zip文件,然后解壓縮同名文件夾。在內部,您會找到一個 lib 文件夾。您有兩個選擇:

您可以將 lib 文件夾添加到您的 CIRCUITPY 驅動器中。這將確保您擁有所有驅動程序。但是這將占用8 MB磁盤上的一堆空間

根據需要添加每個庫,這將減少空間使用量,但您需要

至少,我們推薦以下庫,實際上我們比推薦的要多。基本上是必需的。因此,立即抓住它們并將它們安裝到 CIRCUITPY/lib !

adafruit_esp32spi -這是一個庫,可通過ESP32進行互聯網訪問使用(您猜對了!)SPI傳輸。 Internet所需的任何東西都需要使用它

adafruit_requests -該庫使我們能夠執行HTTP請求并從服務器獲取響應。 GET/POST/PUT/PATCH-它們都在這里!

adafruit_pyportal -這是我們友好的包裝器庫,可處理很多項目,顯示圖形和文本,從互聯網上獲取數據。

adafruit_touchscreen -一個用于從電阻式觸摸屏讀取觸摸的庫。

adafruit_cursorcontrol -用于讀取PyGamer和PyBadge游戲桿和按鈕的庫。為您處理所有圖形,按鈕閱讀和操縱桿移動。

adafruit_io -該庫有助于將PyPortal連接到我們的免費數據記錄和查看服務

adafruit_imageload -任何圖形所需的圖像顯示助手!

adafruit_display_text -毫不奇怪,它在屏幕上顯示文本

adafruit_bitmap_font -我們擁有精美的字體支持,并且易于制作新字體。該庫讀取并解析字體文件。

adafruit_slideshow -用于制作圖像幻燈片-方便快速顯示圖形和聲音

neopixel -用于控制板載新像素

adafruit_adt7410 -用于從板載Analog Devices ADT7410精密溫度傳感器讀取溫度的庫

adafruit_sdcard -支持從板載SD卡插槽中讀取/寫入數據。

adafruit_bus_device -對I2C/SPI的低級支持

Internet連接!

一旦您安裝了CircuitPython安裝程序和庫,我們就可以將您的電路板連接到Internet。請注意,目前不支持訪問企業級安全的WiFi網絡,僅支持需要SSID和密碼的WiFi網絡。

要建立連接,您需要先創建一個秘密文件。

什么是機密文件?

我們希望人們在構建CircuitPython WiFi小部件時共享大量項目。我們要避免的是人們不小心共享了他們的密碼或秘密令牌和API密鑰。因此,我們設計了所有示例,以使用 CIRCUITPY 驅動器中的secrets.py文件來保存秘密/私有/自定義數據。這樣,您就可以共享您的主項目,而不必擔心意外共享私有內容。

您的 secrets.py 文件應如下所示:

下載:文件

復制代碼

# This file is where you keep secret settings, passwords, and tokens!

# If you put them in the code you risk committing that info or sharing it

secrets = {

‘ssid’ : ‘home ssid’,

‘password’ : ‘my password’,

‘timezone’ : “America/New_York”, # http://worldtimeapi.org/timezones

‘github_token’ : ‘fawfj23rakjnfawiefa’,

‘hackaday_token’ : ‘h4xx0rs3kret’,

}

# This file is where you keep secret settings, passwords, and tokens!

# If you put them in the code you risk committing that info or sharing it

secrets = {

‘ssid’ : ‘home ssid’,

‘password’ : ‘my password’,

‘timezone’ : “America/New_York”, # http://worldtimeapi.org/timezones

‘github_token’ : ‘fawfj23rakjnfawiefa’,

‘hackaday_token’ : ‘h4xx0rs3kret’,

}

Inside是一個名為secrets的python字典,每個條目都有一行。每個條目都有一個條目名稱(例如‘ssid’),然后是一個冒號以將其與條目鍵‘home ssid’分開,最后是一個逗號,

至少您需要ssid和password用于您的本地WiFi設置。在創建項目時,您可能需要更多的令牌和密鑰,只需一次添加一行即可。例如,請參見其他令牌,例如用于訪問github或hackaday API的令牌。其他非機密數據(例如您的時區)也可以在此處,僅因為其稱為機密的信息并不意味著您不能在其中包含常規的自定義數據!

有關正確的時區字符串,請查看http://worldtimeapi.org/timezones,請記住,如果未列出您的城市,請在同一時區中查找城市,例如,波士頓,紐約,費城,華盛頓特區和邁阿密都與紐約位于同一時間。

當然,不要共享您的 secrets.py -將其保存在GitHub,Discord或其他項目共享站點之外。

連接到WiFi

好,現在您已設置好機密-您可以連接到Internet。讓我們使用ESP32SPI和Requests庫-您需要訪問CircuitPython捆綁包并安裝:

adafruit_bus_device

adafruit_esp32spi

adafruit_requests

neopixel

進入您的lib文件夾。完成后,使用Mu或您喜歡的編輯器加載以下示例:

下載:項目郵編或 esp32spi_simpletest.py | 在Github上查看

復制代碼

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

print(“ESP32 SPI webclient test”)

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

JSON_URL = “http://api.coindesk.com/v1/bpi/currentprice/USD.json”

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

requests.set_socket(socket, esp)

if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:

print(“ESP32 found and in idle mode”)

print(“Firmware vers.”, esp.firmware_version)

print(“MAC addr:”, [hex(i) for i in esp.MAC_address])

for ap in esp.scan_networks():

print(“ %s RSSI: %d” % (str(ap[‘ssid’], ‘utf-8’), ap[‘rssi’]))

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

print(“My IP address is”, esp.pretty_ip(esp.ip_address))

print(“IP lookup adafruit.com: %s” % esp.pretty_ip(esp.get_host_by_name(“adafruit.com”)))

print(“Ping google.com: %d ms” % esp.ping(“google.com”))

#esp._debug = True

print(“Fetching text from”, TEXT_URL)

r = requests.get(TEXT_URL)

print(‘-’*40)

print(r.text)

print(‘-’*40)

r.close()

print()

print(“Fetching json from”, JSON_URL)

r = requests.get(JSON_URL)

print(‘-’*40)

print(r.json())

print(‘-’*40)

r.close()

print(“Done!”)

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

print(“ESP32 SPI webclient test”)

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

JSON_URL = “http://api.coindesk.com/v1/bpi/currentprice/USD.json”

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

requests.set_socket(socket, esp)

if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:

print(“ESP32 found and in idle mode”)

print(“Firmware vers.”, esp.firmware_version)

print(“MAC addr:”, [hex(i) for i in esp.MAC_address])

for ap in esp.scan_networks():

print(“ %s RSSI: %d” % (str(ap[‘ssid’], ‘utf-8’), ap[‘rssi’]))

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

print(“My IP address is”, esp.pretty_ip(esp.ip_address))

print(“IP lookup adafruit.com: %s” % esp.pretty_ip(esp.get_host_by_name(“adafruit.com”)))

print(“Ping google.com: %d ms” % esp.ping(“google.com”))

#esp._debug = True

print(“Fetching text from”, TEXT_URL)

r = requests.get(TEXT_URL)

print(‘-’*40)

print(r.text)

print(‘-’*40)

r.close()

print()

print(“Fetching json from”, JSON_URL)

r = requests.get(JSON_URL)

print(‘-’*40)

print(r.json())

print(‘-’*40)

r.close()

print(“Done!”)

,并將其保存到您的板上,名稱為code.py。

第一個連接示例不使用機密文件-您將首先輸入SSID/密碼來驗證連接性!

然后轉到此行

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

并更改MY_SSID_NAME和 MY_SSID_PASSWORD 設置為您的訪問點名稱和密碼,并將其保留在‘’引號內。 (此示例不使用機密文件,但它也非常獨立,因此,如果其他事情似乎不起作用,則可以始終重新加載該文件。您應該獲得如下內容:

示例代碼。..

使用SPI端口和3個控制引腳通過SPI初始化ESP32:

下載:文件

復制代碼

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset) esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

告訴我們的requests庫我們正在使用的套接字的類型(套接字類型隨連接類型而變化-在此示例中,我們將使用adafruit_esp32spi_socket)。還將接口設置為

下載:文件

復制代碼

esp requests

驗證找到ESP32,檢查固件和MAC地址

下載:文件

復制代碼

requests.set_socket(socket, esp) requests.set_socket(socket, esp)

掃描它可以看到的所有訪問點,并打印出名稱和信號強度:

下載:文件

復制代碼

if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:

print(“ESP32 found and in idle mode”)

print(“Firmware vers.”, esp.firmware_version)

print(“MAC addr:”, [hex(i) for i in esp.MAC_address]) if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:

print(“ESP32 found and in idle mode”)

print(“Firmware vers.”, esp.firmware_version)

print(“MAC addr:”, [hex(i) for i in esp.MAC_address])

連接到我們在此處定義的AP,然后打印出來本地IP地址,嘗試進行域名查找并ping google.com以檢查網絡連接(請注意,有時ping失敗或需要一段時間,這沒什么大不了的)

下載:文件

復制代碼

for ap in esp.scan_networks():

print(“ %s RSSI: %d” % (str(ap[‘ssid’], ‘utf-8’), ap[‘rssi’])) for ap in esp.scan_networks():

print(“ %s RSSI: %d” % (str(ap[‘ssid’], ‘utf-8’), ap[‘rssi’]))

好的,現在我們進入真正有趣的部分。使用SAMD51或其他大容量RAM(超過32 KB)設備,我們可以做很多巧妙的事情。例如,我們可以像請求一樣實現一個接口,這使得獲取數據非常簡單

從Web URL調用 print(“Connecting to AP.。.”)

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

print(“My IP address is”, esp.pretty_ip(esp.ip_address))

print(“IP lookup adafruit.com: %s” % esp.pretty_ip(esp.get_host_by_name(“adafruit.com”)))

print(“Ping google.com: %d ms” % esp.ping(“google.com”))

中讀取所有文本-您可以傳入 print(“Connecting to AP.。.”)

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

print(“My IP address is”, esp.pretty_ip(esp.ip_address))

print(“IP lookup adafruit.com: %s” % esp.pretty_ip(esp.get_host_by_name(“adafruit.com”)))

print(“Ping google.com: %d ms” % esp.ping(“google.com”))

用于SSL連接的URL

下載:文件

復制代碼

requests.get https

或者,如果數據使用結構化JSON,則可以獲取json pre -解析為可以輕松查詢或遍歷的Python字典。 (同樣,僅適用于nRF52840,M4和其他高RAM板)

下載:文件

復制代碼

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

print(“Fetching text from”, TEXT_URL)

r = requests.get(TEXT_URL)

print(‘-’*40)

print(r.text)

print(‘-’*40)

r.close() TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

print(“Fetching text from”, TEXT_URL)

r = requests.get(TEXT_URL)

print(‘-’*40)

print(r.text)

print(‘-’*40)

r.close()

Requests

我們已經為Web接口編寫了一個類似請求的庫,名為Adafruit_CircuitPython_Requests。該庫允許您發送HTTP/1.1請求,而無需“設計”它們,并提供了有用的方法來解析服務器的響應。

下載:Project Zip 或 requests_simpletest.py | 在Github上查看

復制代碼

JSON_URL = “http://api.coindesk.com/v1/bpi/currentprice/USD.json”

print(“Fetching json from”, JSON_URL)

r = requests.get(JSON_URL)

print(‘-’*40)

print(r.json())

print(‘-’*40)

r.close() JSON_URL = “http://api.coindesk.com/v1/bpi/currentprice/USD.json”

print(“Fetching json from”, JSON_URL)

r = requests.get(JSON_URL)

print(‘-’*40)

print(r.json())

print(‘-’*40)

r.close()

代碼首先設置ESP32SPI接口。然后,它使用ESP32 # adafruit_requests usage with an esp32spi_socket

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

JSON_GET_URL = “http://httpbin.org/get”

JSON_POST_URL = “http://httpbin.org/post”

print(“Fetching text from %s”%TEXT_URL)

response = requests.get(TEXT_URL)

print(‘-’*40)

print(“Text Response: ”, response.text)

print(‘-’*40)

response.close()

print(“Fetching JSON data from %s”%JSON_GET_URL)

response = requests.get(JSON_GET_URL)

print(‘-’*40)

print(“JSON Response: ”, response.json())

print(‘-’*40)

response.close()

data = ‘31F’

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, data))

response = requests.post(JSON_POST_URL, data=data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘data’ key from json_resp dict.

print(“Data received from server:”, json_resp[‘data’])

print(‘-’*40)

response.close()

json_data = {“Date” : “July 25, 2019”}

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, json_data))

response = requests.post(JSON_POST_URL, json=json_data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘json’ key from json_resp dict.

print(“JSON Data received from server:”, json_resp[‘json’])

print(‘-’*40)

response.close()

和# adafruit_requests usage with an esp32spi_socket

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

JSON_GET_URL = “http://httpbin.org/get”

JSON_POST_URL = “http://httpbin.org/post”

print(“Fetching text from %s”%TEXT_URL)

response = requests.get(TEXT_URL)

print(‘-’*40)

print(“Text Response: ”, response.text)

print(‘-’*40)

response.close()

print(“Fetching JSON data from %s”%JSON_GET_URL)

response = requests.get(JSON_GET_URL)

print(‘-’*40)

print(“JSON Response: ”, response.json())

print(‘-’*40)

response.close()

data = ‘31F’

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, data))

response = requests.post(JSON_POST_URL, data=data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘data’ key from json_resp dict.

print(“Data received from server:”, json_resp[‘data’])

print(‘-’*40)

response.close()

json_data = {“Date” : “July 25, 2019”}

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, json_data))

response = requests.post(JSON_POST_URL, json=json_data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘json’ key from json_resp dict.

print(“JSON Data received from server:”, json_resp[‘json’])

print(‘-’*40)

response.close()

對象初始化request對象。

下載:文件

復制代碼

socket esp

帶有請求的HTTP GET

代碼向Adafruit的WiFi測試網站-http:/發出HTTP GET請求/wifitest.adafruit.com/testwifi/index.html。

為此,我們會將URL傳遞到import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)。我們還將將來自服務器的響應保存到名為import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)的變量。

盡管我們從服務器請求數據,但我們還是希望服務器回應。由于我們已經保存了服務器的requests.get(),因此可以將其讀回。對我們來說幸運的是,請求將服務器的響應自動解碼為人類可讀的文本,您可以通過調用response將其讀回。

最后,我們將執行一些操作通過調用response進行清理。這樣會關閉,刪除和收集響應的數據。

下載:文件

復制代碼

response.text response.close()

一些服務器使用文本響應,而某些服務器則使用由屬性-值對組成的json格式的數據進行響應。/p》

CircuitPython_Requests可以將來自服務器的JSON格式的響應轉換為CPython print(“Fetching text from %s”%TEXT_URL)

response = requests.get(TEXT_URL)

print(‘-’*40)

print(“Text Response: ”, response.text)

print(‘-’*40)

response.close()對象。

我們還可以獲取和解析 json 數據。我們將發送HTTP Get到一個我們知道的URL,該URL返回一個json格式的響應(而不是文本數據)。

然后,代碼調用print(“Fetching text from %s”%TEXT_URL)

response = requests.get(TEXT_URL)

print(‘-’*40)

print(“Text Response: ”, response.text)

print(‘-’*40)

response.close()將響應轉換為一個CPython dict.。

下載:文件

復制代碼

response.json() dict

帶有請求的HTTP POST

請求還可以通過調用print(“Fetching JSON data from %s”%JSON_GET_URL)

response = requests.get(JSON_GET_URL)

print(‘-’*40)

print(“JSON Response: ”, response.json())

print(‘-’*40)

response.close()方法(向其傳遞一個print(“Fetching JSON data from %s”%JSON_GET_URL)

response = requests.get(JSON_GET_URL)

print(‘-’*40)

print(“JSON Response: ”, response.json())

print(‘-’*40)

response.close()值)將數據發布到服務器。

下載:文件

復制代碼

requests.post data

您還可以通過將data = ‘31F’

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, data))

response = requests.post(JSON_POST_URL, data=data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘data’ key from json_resp dict.

print(“Data received from server:”, json_resp[‘data’])

print(‘-’*40)

response.close()傳遞到data = ‘31F’

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, data))

response = requests.post(JSON_POST_URL, data=data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘data’ key from json_resp dict.

print(“Data received from server:”, json_resp[‘data’])

print(‘-’*40)

response.close()方法中,將json格式的數據發布到服務器。

下載:文件

復制代碼

json_data requests.post

高級請求使用情況

要發送自定義HTTP, aders,將響應解析為原始字節,還是在CircuitPython代碼中處理響應的http狀態代碼?

我們已經編寫了一個示例來顯示下面的請求模塊的高級用法。

下載:項目Zip 或 requests_advanced.py | 在Github上查看

復制代碼

json_data = {“Date” : “July 25, 2019”}

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, json_data))

response = requests.post(JSON_POST_URL, json=json_data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘json’ key from json_resp dict.

print(“JSON Data received from server:”, json_resp[‘json’])

print(‘-’*40)

response.close()

json_data = {“Date” : “July 25, 2019”}

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, json_data))

response = requests.post(JSON_POST_URL, json=json_data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘json’ key from json_resp dict.

print(“JSON Data received from server:”, json_resp[‘json’])

print(‘-’*40)

response.close()

WiFi Manager

這個最簡單的示例可行,但有點挑剔-您需要不斷檢查WiFi狀態,并具有許多循環來管理連接和斷開連接。對于更高級的用途,我們建議使用WiFiManager對象。它將為您包裝連接/狀態/請求循環-如果WiFi掉線,則重新連接,如果ESP32進入不良狀態,則重置ESP32,等等。

這是一個更高級的示例,其中顯示了WiFi管理器以及如何使用一些額外的標題發布數據:

下載:Project Zip 或 esp32spi_aio_post.py | 在Github上查看

復制代碼

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)

JSON_GET_URL = “http://httpbin.org/get”

# Define a custom header as a dict.

headers = {“user-agent” : “blinka/1.0.0”}

print(“Fetching JSON data from %s.。.”%JSON_GET_URL)

response = requests.get(JSON_GET_URL, headers=headers)

print(‘-’*60)

json_data = response.json()

headers = json_data[‘headers’]

print(“Response‘s Custom User-Agent Header: {0}”.format(headers[’User-Agent‘]))

print(’-‘*60)

# Read Response’s HTTP status code

print(“Response HTTP Status Code: ”, response.status_code)

print(‘-’*60)

# Read Response, as raw bytes instead of pretty text

print(“Raw Response: ”, response.content)

# Close, delete and collect the response data

response.close()

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)

JSON_GET_URL = “http://httpbin.org/get”

# Define a custom header as a dict.

headers = {“user-agent” : “blinka/1.0.0”}

print(“Fetching JSON data from %s.。.”%JSON_GET_URL)

response = requests.get(JSON_GET_URL, headers=headers)

print(‘-’*60)

json_data = response.json()

headers = json_data[‘headers’]

print(“Response‘s Custom User-Agent Header: {0}”.format(headers[’User-Agent‘]))

print(’-‘*60)

# Read Response’s HTTP status code

print(“Response HTTP Status Code: ”, response.status_code)

print(‘-’*60)

# Read Response, as raw bytes instead of pretty text

print(“Raw Response: ”, response.content)

# Close, delete and collect the response data

response.close()

您會在這里注意到,我們使用secrets.py文件來管理我們的SSID信息。 wifimanager被賦予了ESP32對象,密碼和一個用于指示狀態的新像素。

請注意,您需要在密碼文件中添加一些其他信息,以便代碼可以查詢Adafruit IO API:

import time

import board

import busio

from digitalio import DigitalInOut

import neopixel

from adafruit_esp32spi import adafruit_esp32spi

from adafruit_esp32spi import adafruit_esp32spi_wifimanager

print(“ESP32 SPI webclient test”)

# Get wifi details and more from a secrets.py file

try:

from secrets import secrets

except ImportError:

print(“WiFi secrets are kept in secrets.py, please add them there!”)

raise

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

“”“Use below for Most Boards”“”

status_light = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.2) # Uncomment for Most Boards

“”“Uncomment below for ItsyBitsy M4”“”

# status_light = dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1, brightness=0.2)

# Uncomment below for an externally defined RGB LED

# import adafruit_rgbled

# from adafruit_esp32spi import PWMOut

# RED_LED = PWMOut.PWMOut(esp, 26)

# GREEN_LED = PWMOut.PWMOut(esp, 27)

# BLUE_LED = PWMOut.PWMOut(esp, 25)

# status_light = adafruit_rgbled.RGBLED(RED_LED, BLUE_LED, GREEN_LED)

wifi = adafruit_esp32spi_wifimanager.ESPSPI_WiFiManager(esp, secrets, status_light)

counter = 0

while True:

try:

print(“Posting data.。.”, end=‘’)

data = counter

feed = ‘test’

payload = {‘value’:data}

response = wifi.post(

“https://io.adafruit.com/api/v2/”+secrets[‘aio_username’]+“/feeds/”+feed+“/data”,

json=payload,

headers={“X-AIO-KEY”:secrets[‘aio_key’]})

print(response.json())

response.close()

counter = counter + 1

print(“OK”)

except (ValueError, RuntimeError) as e:

print(“Failed to get data, retrying ”, e)

wifi.reset()

continue

response = None

time.sleep(15)

import time

import board

import busio

from digitalio import DigitalInOut

import neopixel

from adafruit_esp32spi import adafruit_esp32spi

from adafruit_esp32spi import adafruit_esp32spi_wifimanager

print(“ESP32 SPI webclient test”)

# Get wifi details and more from a secrets.py file

try:

from secrets import secrets

except ImportError:

print(“WiFi secrets are kept in secrets.py, please add them there!”)

raise

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

“”“Use below for Most Boards”“”

status_light = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.2) # Uncomment for Most Boards

“”“Uncomment below for ItsyBitsy M4”“”

# status_light = dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1, brightness=0.2)

# Uncomment below for an externally defined RGB LED

# import adafruit_rgbled

# from adafruit_esp32spi import PWMOut

# RED_LED = PWMOut.PWMOut(esp, 26)

# GREEN_LED = PWMOut.PWMOut(esp, 27)

# BLUE_LED = PWMOut.PWMOut(esp, 25)

# status_light = adafruit_rgbled.RGBLED(RED_LED, BLUE_LED, GREEN_LED)

wifi = adafruit_esp32spi_wifimanager.ESPSPI_WiFiManager(esp, secrets, status_light)

counter = 0

while True:

try:

print(“Posting data.。.”, end=‘’)

data = counter

feed = ‘test’

payload = {‘value’:data}

response = wifi.post(

“https://io.adafruit.com/api/v2/”+secrets[‘aio_username’]+“/feeds/”+feed+“/data”,

json=payload,

headers={“X-AIO-KEY”:secrets[‘aio_key’]})

print(response.json())

response.close()

counter = counter + 1

print(“OK”)

except (ValueError, RuntimeError) as e:

print(“Failed to get data, retrying ”, e)

wifi.reset()

continue

response = None

time.sleep(15)

您可以轉到adafruit.io查看AIO密鑰鏈接獲取這兩個值并將它們添加到secrets文件中,該文件現在看起來像這樣:

下載:文件

復制代碼

aio_username aio_key

下一步,設置一個名為Adafruit IO提要# This file is where you keep secret settings, passwords, and tokens!

# If you put them in the code you risk committing that info or sharing it

secrets = {

‘ssid’ : ‘_your_ssid_’,

‘password’ : ‘_your_wifi_password_’,

‘timezone’ : “America/Los_Angeles”, # http://worldtimeapi.org/timezones

‘aio_username’ : ‘_your_aio_username_’,

‘aio_key’ : ‘_your_aio_key_’,

}

如果您不知道如何設置供稿,請遵循此頁面并在設置名為。

然后,我們可以有一個簡單的循環,用于將數據發布到Adafruit IO,而無需處理連接或初始化硬件!

在Adafruit.io上查看您的測試數據,每次Cir時,您都會看到該值增加cuitPython板向其發布數據!

Twitter認證密鑰

在使用Twitter API之前,我們需要注冊一個開發人員帳戶。

開始到https://developer.twitter.com/en.html。您應該會看到類似以下頁面的頁面:

單擊應用:

然后申請開發者帳戶:

選擇瀏覽API ,然后點擊下一步 。

填寫顯示的表格,然后點擊下一步。驗證信息,然后單擊下一步。同意條款,然后點擊提交申請。您會在輸入的地址收到一封確認電子郵件。相應地進行響應,您將可以創建您的 app 。

創建應用程序

要獲取要使用的密鑰,您需要創建一個應用程序。您將獲得該應用程序的密鑰,在本例中為萬圣節倒計時應用程序。

單擊創建應用程序將顯示一個表格。如您所愿地將其填寫,總體上似乎不太挑剔。完成該操作后,您的應用程序頁面將列出您的新應用程序:

點擊應用旁邊的詳細信息按鈕。這會提供您應用程序上的所有信息。

您正在尋找的是應用程序密鑰。在“密鑰和令牌”標簽上找到它們:

將 API密鑰和 API秘密密鑰作為 secrets.py 文件中= 1》和twitter_api_key。

就是這樣。

獲取推文

OAuth徽標作者:Chris Messina CC BY_SA 3.0

Authenticating

一旦擁有了Twitter密鑰,就可以在程序開始獲取Twitter OAuth 2.0 bearer令牌時使用它們。這涉及合并兩個密鑰,進行base64編碼,調用Twitter API,以及從響應中提取承載令牌。它有些牽連,即使我們只需要使用一次,它也是包裝函數的理想之選。

誰知道,這可能是Twitter API包裝庫的開始。

下載:文件

復制代碼

def get_bearer_token():

“”“Get the bearer authentication token from twitter.”“”

raw_key = secrets[‘twitter_api_key’] + ‘:’ + secrets[‘twitter_secret_key’]

encoded_key = binascii.b2a_base64(bytes(raw_key, ‘utf8’))

string_key = bytes.decode(encoded_key)

headers= {‘Authorization’: ‘Basic ’ + string_key,

‘Content-Type’: ‘application/x-www-form-urlencoded;charset=UTF-8’}

response = requests.post(‘https://api.twitter.com/oauth2/token’,

headers=headers,

data=‘grant_type=client_credentials’)

response_dict = json.loads(response.content)

if response_dict[‘token_type’] != ‘bearer’:

halt_and_catch_fire(‘Wrong token type from twitter: %s’, response_dict[‘token_type’])

return response_dict[‘access_token’] def get_bearer_token():

“”“Get the bearer authentication token from twitter.”“”

raw_key = secrets[‘twitter_api_key’] + ‘:’ + secrets[‘twitter_secret_key’]

encoded_key = binascii.b2a_base64(bytes(raw_key, ‘utf8’))

string_key = bytes.decode(encoded_key)

headers= {‘Authorization’: ‘Basic ’ + string_key,

‘Content-Type’: ‘application/x-www-form-urlencoded;charset=UTF-8’}

response = requests.post(‘https://api.twitter.com/oauth2/token’,

headers=headers,

data=‘grant_type=client_credentials’)

response_dict = json.loads(response.content)

if response_dict[‘token_type’] != ‘bearer’:

halt_and_catch_fire(‘Wrong token type from twitter: %s’, response_dict[‘token_type’])

return response_dict[‘access_token’]

注意對函數halt_and_catch_fire的調用。該函數接受傳遞的參數,將其組合并打印結果,然后停止(通過無限循環)。該名稱是對AMC的致敬,該展覽與微型計算機行業的早期名稱相同。盡管并不完全準確(相信我,我在那里),但它還是很有趣的。反過來,它是對(來自Wikipedia的)引用:

在計算機工程中, Halt and Catch Fire (由組裝助記符 HCF 已知) ,是計算機計算機代碼指令的慣用語,該指令導致計算機的中央處理單元(CPU)停止有意義的操作,通常需要重新啟動計算機。

這似乎是適當的。

下載:文件

復制代碼

def halt_and_catch_fire(message, *args):

“”“Log a critical error and stall the system.”“”

print(message % args)

while True:

pass def halt_and_catch_fire(message, *args):

“”“Log a critical error and stall the system.”“”

print(message % args)

while True:

pass

設置PyPortal對象

在真正發生任何事情之前,我們需要一個PyPortal的實例。這將設置URL,用于從該URL返回的json中提取推文文本的json路徑,以及文本區域特征。

下載:文件

復制代碼

cwd = (“/”+__file__).rsplit(‘/’, 1)[0]

url = ‘https://api.twitter.com/1.1/statuses/user_timeline.json?count=1&screen_name=’ + username

# Initialize the pyportal object and let us know what data to fetch and where

# to display it

pyportal = PyPortal(url=url,

json_path=(0, ‘text’),

status_neopixel=board.NEOPIXEL,

default_bg=cwd + ‘/twitter_background.bmp’,

text_font=cwd+‘/fonts/Helvetica-Bold-16.bdf’,

text_position=(20, 60),

text_color=0xFFFFFF,

text_wrap=35,

caption_text=‘@’ + username,

caption_font=cwd+‘/fonts/Helvetica-Bold-16.bdf’,

caption_position=(5, 210),

caption_color=0x808080) cwd = (“/”+__file__).rsplit(‘/’, 1)[0]

url = ‘https://api.twitter.com/1.1/statuses/user_timeline.json?count=1&screen_name=’ + username

# Initialize the pyportal object and let us know what data to fetch and where

# to display it

pyportal = PyPortal(url=url,

json_path=(0, ‘text’),

status_neopixel=board.NEOPIXEL,

default_bg=cwd + ‘/twitter_background.bmp’,

text_font=cwd+‘/fonts/Helvetica-Bold-16.bdf’,

text_position=(20, 60),

text_color=0xFFFFFF,

text_wrap=35,

caption_text=‘@’ + username,

caption_font=cwd+‘/fonts/Helvetica-Bold-16.bdf’,

caption_position=(5, 210),

caption_color=0x808080)

這也會初始化wifi堆棧,因此現在我們可以獲取身份驗證令牌并構造推文獲取所需的身份驗證標頭。

下載:文件

復制代碼

bearer_token = get_bearer_token()

pyportal.set_headers({‘Authorization’: ‘Bearer ’ + bearer_token}) bearer_token = get_bearer_token()

pyportal.set_headers({‘Authorization’: ‘Bearer ’ + bearer_token})

獲取推文

現在,承載令牌已被獲取并用于設置auth標頭,可以調用API來獲取一些推文

主循環在下面。每小時都會獲取最新的推文。上面我們設置了PyPortal實例,其中包含從Twitter API中獲取數據,提取推文的文本并顯示它所需的一切。所有需要做的就是告訴它使用fetch()方法來做到這一點。

下載:文件

復制代碼

while True:

pyportal.fetch()

time.sleep(3600) # check every hour while True:

pyportal.fetch()

time.sleep(3600) # check every hour

代碼

下載: Project Zip 或 code.py | 在Github上查看

復制代碼

“”“

Twitter API for PyPortal.

Adafruit invests time and resources providing this open source code.

Please support Adafruit and open source hardware by purchasing

products from Adafruit!

Written by Dave Astels for Adafruit Industries

Copyright (c) 2019 Adafruit Industries

Licensed under the MIT license.

All text above must be included in any redistribution.

”“”

#pylint:disable=invalid-name

import time

import binascii

import json

import board

from adafruit_pyportal import PyPortal

import adafruit_esp32spi.adafruit_esp32spi_requests as requests

username = ‘codewisdom’

try:

from secrets import secrets

except ImportError:

print(“”“WiFi settings are kept in secrets.py, please add them there!

the secrets dictionary must contain ‘ssid’ and ‘password’ at a minimum”“”)

raise

def halt_and_catch_fire(message, *args):

“”“Log a critical error and stall the system.”“”

print(message % args)

while True:

pass

def get_bearer_token():

“”“Get the bearer authentication token from twitter.”“”

raw_key = secrets[‘twitter_api_key’] + ‘:’ + secrets[‘twitter_secret_key’]

encoded_key = binascii.b2a_base64(bytes(raw_key, ‘utf8’))

string_key = bytes.decode(encoded_key)

headers = {‘Authorization’: ‘Basic ’ + string_key,

‘Content-Type’: ‘application/x-www-form-urlencoded;charset=UTF-8’}

response = requests.post(‘https://api.twitter.com/oauth2/token’,

headers=headers,

data=‘grant_type=client_credentials’)

response_dict = json.loads(response.content)

if response_dict[‘token_type’] != ‘bearer’:

halt_and_catch_fire(‘Wrong token type from twitter: %s’, response_dict[‘token_type’])

return response_dict[‘access_token’]

# determine the current working directory

# needed so we know where to find files

cwd = (“/”+__file__).rsplit(‘/’, 1)[0]

url = ‘https://api.twitter.com/1.1/statuses/user_timeline.json?count=1&screen_name=’ + username

# Initialize the pyportal object and let us know what data to fetch and where

# to display it

pyportal = PyPortal(url=url,

json_path=(0, ‘text’),

status_neopixel=board.NEOPIXEL,

default_bg=cwd + ‘/twitter_background.bmp’,

text_font=cwd+‘/fonts/Helvetica-Bold-16.bdf’,

text_position=(20, 60),

text_color=0xFFFFFF,

text_wrap=35,

caption_text=‘@’ + username,

caption_font=cwd+‘/fonts/Helvetica-Bold-16.bdf’,

caption_position=(5, 210),

caption_color=0x808080)

bearer_token = get_bearer_token()

pyportal.set_headers({‘Authorization’: ‘Bearer ’ + bearer_token})

while True:

pyportal.fetch()

time.sleep(3600) # check every hour

“”“

Twitter API for PyPortal.

Adafruit invests time and resources providing this open source code.

Please support Adafruit and open source hardware by purchasing

products from Adafruit!

Written by Dave Astels for Adafruit Industries

Copyright (c) 2019 Adafruit Industries

Licensed under the MIT license.

All text above must be included in any redistribution.

”“”

#pylint:disable=invalid-name

import time

import binascii

import json

import board

from adafruit_pyportal import PyPortal

import adafruit_esp32spi.adafruit_esp32spi_requests as requests

username = ‘codewisdom’

try:

from secrets import secrets

except ImportError:

print(“”“WiFi settings are kept in secrets.py, please add them there!

the secrets dictionary must contain ‘ssid’ and ‘password’ at a minimum”“”)

raise

def halt_and_catch_fire(message, *args):

“”“Log a critical error and stall the system.”“”

print(message % args)

while True:

pass

def get_bearer_token():

“”“Get the bearer authentication token from twitter.”“”

raw_key = secrets[‘twitter_api_key’] + ‘:’ + secrets[‘twitter_secret_key’]

encoded_key = binascii.b2a_base64(bytes(raw_key, ‘utf8’))

string_key = bytes.decode(encoded_key)

headers = {‘Authorization’: ‘Basic ’ + string_key,

‘Content-Type’: ‘application/x-www-form-urlencoded;charset=UTF-8’}

response = requests.post(‘https://api.twitter.com/oauth2/token’,

headers=headers,

data=‘grant_type=client_credentials’)

response_dict = json.loads(response.content)

if response_dict[‘token_type’] != ‘bearer’:

halt_and_catch_fire(‘Wrong token type from twitter: %s’, response_dict[‘token_type’])

return response_dict[‘access_token’]

# determine the current working directory

# needed so we know where to find files

cwd = (“/”+__file__).rsplit(‘/’, 1)[0]

url = ‘https://api.twitter.com/1.1/statuses/user_timeline.json?count=1&screen_name=’ + username

# Initialize the pyportal object and let us know what data to fetch and where

# to display it

pyportal = PyPortal(url=url,

json_path=(0, ‘text’),

status_neopixel=board.NEOPIXEL,

default_bg=cwd + ‘/twitter_background.bmp’,

text_font=cwd+‘/fonts/Helvetica-Bold-16.bdf’,

text_position=(20, 60),

text_color=0xFFFFFF,

text_wrap=35,

caption_text=‘@’ + username,

caption_font=cwd+‘/fonts/Helvetica-Bold-16.bdf’,

caption_position=(5, 210),

caption_color=0x808080)

bearer_token = get_bearer_token()

pyportal.set_headers({‘Authorization’: ‘Bearer ’ + bearer_token})

while True:

pyportal.fetch()

time.sleep(3600) # check every hour
責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4801

    瀏覽量

    84863
收藏 人收藏

    評論

    相關推薦

    支持遠程脫機密下載加密芯片SMEC編程器開發板介紹

    被監聽,這些數據也無法下載到別的加密芯片。下面具體介紹密數據產生和下載流程:1、需要下載密文文件的SMEC編程器上獲取安全碼。2、開發者填入安全碼,選擇需要加密的目標下載Hex文件,并選定設定次數
    發表于 01-08 11:30

    API :軟件程序間溝通的橋梁

    或許我們不清楚API是什么,但在現實生活中,API的應用場景卻遠遠超出了我們的想象。舉個例子來說,當我們想要搜索某個IP地址時,通常是利用API與離線庫兩種方式去獲取數據信息,那么或許
    的頭像 發表于 08-27 15:54 ?280次閱讀

    OpenAI api key獲取并可調用GPT-4.0、GPT-4o、GPT-4omini

    前言 在這篇文章中,我們將詳細介紹如何申請OpenAI的GPT-4.0 API Key。通過這個教程,你將能夠輕松獲取OpenAI API KEY并使用GPT-4.0的強大功能。 目錄 注冊
    的頭像 發表于 08-06 15:16 ?3358次閱讀
    OpenAI <b class='flag-5'>api</b> key<b class='flag-5'>獲取</b>并可調用GPT-4.0、GPT-4o、GPT-4omini

    請問如何在WPS模式下獲取AP的SSID和PWD?

    用戶如何使用WPS功能(AT WPS=1)加入網絡后獲取AP的SSID、文本格式的密碼和AP的安全類型。 如果用戶需要執行自定義的 AT 命令,應調用哪些 API 函數。 謝謝。
    發表于 07-16 06:11

    如何獲取連接的TCP客戶端的ESPCONN指針?

    我幾乎閱讀了 SDK API 指南版本 1.0.1 的所有文檔 并開始了解如何添加用戶 AT 命令。 這真的很簡單,只需撥打at_cmd_array_register。 BUT! 如何獲取連接的 TCP 客戶端的 ESPCONN
    發表于 07-12 14:54

    百度心大模型4.0 Turbo,正式發布 用戶規模已達3億

    的最新數據,并正式發布心大模型4.0 Turbo、飛槳框架3.0等最新技術,披露飛槳心生態最新成果。 ?01?心大模型4.0 Turbo發布? 心一言
    的頭像 發表于 06-29 10:06 ?890次閱讀

    OpenAI API Key獲取:開發人員申請GPT-4 API Key教程

    的絕佳機會,還能為用戶帶來前所未有的交互體驗。本文將詳細介紹如何輕松獲取GPT-4 API Key,并提供一個簡單的部署代碼示例。 第1步:注冊OpenAI賬號 要使用GPT-4 API
    的頭像 發表于 06-24 17:40 ?2458次閱讀
    OpenAI <b class='flag-5'>API</b> Key<b class='flag-5'>獲取</b>:開發人員申請GPT-4 <b class='flag-5'>API</b> Key教程

    求助,用戶可以獲取ESP32芯片的UID嗎?

    如題,想要使用芯片本身的UID作為設備的唯一標識碼,但是沒找到UID的獲取方法。 請問用戶是否可以獲取芯片的UID呢?如果可以的話,應該如何獲取呢?
    發表于 06-20 07:19

    開發者申請Gemini 1.5 Pro API Key:輕松獲取Gemini 1.5 Pro模型API Key并開發部署AI應用

    Pro 開放 API 讓開發者申請使用!輕松獲取Gemini 1.5 Pro API Key教程:開發者申請部署ai應用。 Gemini Pro 1.5 超過180個國家或地區的Gemini
    的頭像 發表于 06-10 18:21 ?1625次閱讀
    開發者申請Gemini 1.5 Pro <b class='flag-5'>API</b> Key:輕松<b class='flag-5'>獲取</b>Gemini 1.5 Pro模型<b class='flag-5'>API</b> Key并開發部署AI應用

    ChatGPT-4 API 密鑰:官方申請指南及國內直連使用攻略

    如何使用 ChatGPT 4.0 API 一、獲取 API Key 要使用 ChatGPT 4.0,首先需要獲取一個 API Key,它將作
    的頭像 發表于 05-29 17:08 ?6706次閱讀
    ChatGPT-4 <b class='flag-5'>API</b> 密鑰:官方申請指南及國內直連使用攻略

    馬斯克宣布原特全部核心系統已運行在 X.com 域名上

    早在 2022 年,斯塔克就斥資 440 億美元(IT 之家詳注:相當于當前 288.8 億元人民幣)收購了特(Twitter),并在 2023 年 7 月將其更名為 X。
    的頭像 發表于 05-17 16:05 ?650次閱讀

    OpenAI API Key獲取與充值教程:助開發者解鎖GPT-4.0 API

    OpenAI 的 API Key,以及如何使用這個 Key 來調用 GPT-4.0 API。 第一步:獲取 OpenAI API Key 要開始使用 OpenAI 的服務,你首先需要
    的頭像 發表于 04-28 16:35 ?1.1w次閱讀
    OpenAI <b class='flag-5'>API</b> Key<b class='flag-5'>獲取</b>與充值教程:助開發者解鎖GPT-4.0 <b class='flag-5'>API</b>

    API安全風險顯現,F5助API實現可信訪問

    的首選目標。面對如此復雜的形勢,企業的安全團隊在F5的助力下,應對API安全威脅。 安全防護能力本身來說,F5收購了Threat Stack,獲得了CWPP(Cloud Workload
    的頭像 發表于 04-17 16:09 ?481次閱讀
    <b class='flag-5'>API</b>安全風險顯現,F5助<b class='flag-5'>API</b>實現可信訪問

    巴西開發商推出Vision Pro頭顯上特客戶端&quot;Dusk&quot;

    Pozzobon表示,通過此款應用,用戶可在Vision Pro上查閱、信息以及私人訊息,同時推送自己的。為保證應用的便捷性,該開發
    的頭像 發表于 02-27 14:33 ?627次閱讀

    蘋果獲取頭顯專利:可精準控制地理位置相關內容展示

     這項名為《限制指定私人內容的方法及設備》的專利旨在讓用戶只在特定環境下才可通過 Vision Pro 頭顯獲取相應數據。以 IT之家提供的專利實例來看,用戶可以設定 Vision P
    的頭像 發表于 01-31 10:23 ?576次閱讀
    蘋果<b class='flag-5'>獲取</b>頭顯專利:可精準控制地理位置相關內容展示
    主站蜘蛛池模板: 天天干天天爽天天射| 亚洲1页| 色婷婷基地| www.欧美成| 午夜手机视频| 国产一区在线播放| 色爱区综合激情五月综合色| 女人的逼毛片| 激情综合丝袜美女一区二区| 久久久精品免费热线观看| 午夜禁片| bt种子搜索在线| 国外免费一级| 成人sese| 国产精品网址你懂的| 免费人成网555www| 日日噜夜夜噜| 欧美视频综合| 日韩免费视频一区| 亚洲精品国产成人| 高h乱肉辣文辣书阁| 亚洲一区二区三区在线| 免费看h网站| 男女交性视频免费播放| 日韩高清成人毛片不卡| japan日韩xxxx69hd| 轻点灬大ji巴太粗太大了小说| 综合亚洲色图| 最新黄色地址| 四虎国产在线| 他也色在线| 婷婷丁香在线| 亚洲国产成人精品女人久久久 | 成年大片免费视频播放手机不卡| 激情亚洲| 毛片一级黄色| 免费国产一区二区三区| 俄罗斯毛片基地| 99久精品| a理论片| 精品亚洲大全|