问题
I'm putting together some python code to move and then delete recordings from Twilio. There's plenty of documentation online to help with the script but the documentation says that I need to add the authorization code and token as a windows variable. The documentation shows how to get to the correct location to add these variables but does not show exactly what to enter, which location to enter it into or the exact format that it needs. I'm am new to all of this. On my Windows 10 machine - in the new variable window - it asks for 'variable name' and 'variable value'. I need to know exactly what I put in and the format it should be in. Any help would be appreciated. Thanks!
Most information to create this code was gathered from https://www.twilio.com/blog/2016/05/bulk-delete-your-twilio-recordings-with-python.html
from twilio.rest import TwilioRestClient
import csv
import threading
from queue import Queue
from datetime import date
import os
import requests
from requests.auth import HTTPBasicAuth
# Ensure your environmental variables have these configured
account_sid = "{{ myaccountSID }}"
auth_token = "{{ myToken }}"
# Initialize Twilio Client
client = TwilioRestClient(account_sid, auth_token)
# Create a lock to serialize console output
lock = threading.Lock()
# The work method includes a print statement to indicate progress
def do_work(recording_sid):
client.recordings.delete(recording_sid)
# Make sure the whole print completes or
# threads can mix up output in one line.
with lock:
print(threading.current_thread().name, "has deleted", recording_sid)
def do_work(recording):
data = requests.get(recording.uri, auth=HTTPBasicAuth(),
stream=True)
# Create a .wav file and stream the recording to improve performance.
with open(recording.sid + '.wav', 'wb') as fd:
for chunk in data.iter_content(1):
fd.write(chunk)
client.recordings.delete(recording.sid)
# Make sure the whole print completes or threads
# can mix up output in one line.
with lock:
print(threading.current_thread().name,
"has downloaded to the local folder and "
"has been deleted off Twilio", recording_sid)
que.task_done()
# Create the queue and thread pool.
# The range value controls the number of threads you run.
que = Queue()
for idx in range(20):
thread = threading.Thread(target=worker)
# thread dies when main thread (only non-daemon thread) exits.
thread.daemon = True
thread.start()
# Open up a CSV file to dump the results of deleted recordings into
with open('recordings.csv', 'w') as csvfile:
record_writer = csv.writer(csvfile, delimiter=',')
# Let's create the header row
record_writer.writerow(["Recording SID", "Duration", "Date", "Call SID"])
# You can use a date filter if needed. e.g. before=date(2016, 5, 30)
for recording in client.recordings.iter(before=date(2016, 5, 30)):
record_writer.writerow([recording.sid, recording.duration,
recording.date_updated, recording.call_sid])
que.put(recording)
que.join() # block until all tasks are done
print("All done!")
回答1:
On my Windows 10 machine - in the new variable window - it asks for 'variable name' and 'variable value'.
I don't have Windows 10 but I'm showing you on Widnows 7, it's probably the same interface to add system variables.
So you need to set two 'Environment Variables' > 'System Variables':
First one:
- 'variable name' put this:
TWILIO_ACCOUNT_SID
- 'variable value' put
your twilio account sid which looks something like this:
AC0123456789abcdefabcdefabcdefabcd
Second one:
- 'variable name' put this:
TWILIO_AUTH_TOKEN
- 'variable value' put your twilio auth token which looks something like this:
0123456789abcdefabcdefabcdefabcd
now back to your code change this:
account_sid = "{{ myaccountSID }}"
auth_token = "{{ myToken }}"
to this:
account_sid = os.environ.get('TWILIO_ACCOUNT_SID')
auth_token = os.environ.get('TWILIO_AUTH_TOKEN')
If you had a command window open, close it. You need to open a new command window in order to pick up the new environment variables.
回答2:
Twilio evangelist here.
By default the TwilioRestClient
object in the Twilio Python helper library looks for environment variables named TWILIO_ACCOUNT_SID
and TWILIO_AUTH_TOKEN
inside the current environment. Here is a post that describes how to set up environment variables on Windows:
https://superuser.com/questions/284342/what-are-path-and-other-environment-variables-and-how-can-i-set-or-use-them
So to set the environment variable for your Account Sid you would open a command prompt and enter:
c:\>set TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXX
Keeping credentials in environment variables is a good way to keep those credentials safe and help prevent something like you accidentally checking them into source control.
If you'd rather not use environment variables you can also provide the credentials directly to the library via the constructor:
from twilio.rest import TwilioRestClient
ACCOUNT_SID = "AXXXXXXXXXXXXXXXXX"
AUTH_TOKEN = "YYYYYYYYYYYYYYYYYY"
client = TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN)
Hope that helps.
来源:https://stackoverflow.com/questions/37750822/twilio-auth-windows-enviro-variables