――Ich wollte im Herbst meines zweiten Studienjahres Entwicklungsingenieur werden und begann mein Selbststudium in Programmierung.
Auf diese Weise habe ich beschlossen, einen Fotobot zu erstellen, aber ich fand es schwierig ... zu diesem Zeitpunkt ist noch ein langer Weg vor mir. Ich stecke oft fest und habe beschlossen, einen Artikel zu schreiben. (Der Grund für das Schreiben in Python ist, dass ich studieren wollte, weil es eine Sprache war, die ich nie persönlich geschrieben hatte, weil der CTO Python mag lol)
Rufen Sie, wie im Bild unten gezeigt, den Bot namens gallery auf, geben Sie gallery
ein und lassen Sie das Bild nachlassen.
Schauen wir uns die Verarbeitung einzeln an.
--Python 2.7 (Bereiten Sie die Entwicklungsumgebung mit pyenv vor)
Erstellen Sie zunächst einen Bot-Benutzer auf der Seite Slack Apps. Das im roten Rechteck geschriebene ist ein Bot-Token. Kopieren Sie es also an einen anderen Ort.
Installieren Sie die Open Source Bot-Verwaltungsbibliothek über pip (https://github.com/slackapi/python-rtmbot).
$ pip install rtmbot
Erstellen Sie danach die Datei rtmbot.conf und bearbeiten Sie sie wie unten gezeigt.
rtmbot.conf
# Add the following to rtmbot.conf
DEBUG: True # make this False in production
# 1.Bitte schreiben Sie hier das Token des damals erstellten Bots.
SLACK_TOKEN: "xoxb-11111111111-222222222222222"
#Schreiben Sie hier den Bot-Pfad.(Zwischen den Namen der Verzeichnisse/nicht,.Lass uns schreiben.)
ACTIVE_PLUGINS:
- plugins.google_photo_to_slack.GooglePhotoToSlackBot
$ pip install gdata
Hier wird erläutert, wie Sie die Google OAuth 2.0-Authentifizierung verwenden.
Google Cloud Platform Dashboard-> Google APIs verwenden-> Anmeldeinformationen, OAuth2.0-Client Erstellen Sie eine ID und laden Sie die geheime JSON-Datei herunter. Wählen Sie als Typ "Andere".
Da die Anzahl der Dateien zugenommen hat, ist die Verzeichnisstruktur wie folgt. Im Moment müssen Sie nichts über den Inhalt von "credentials.dat" schreiben.
rtmbot
├── photo-gallery.json
├── credentials.dat
├── plugins
│ ├── __init__.py
│ └── google_photo_to_slack.py
├── rtmbot.conf
└── rtmbot.log
Um Ihr Login zu bestätigen, schreiben Sie zunächst Folgendes. Wenn eines der in der folgenden Datei aufgeführten Module nicht installiert ist, installieren Sie es.
google_photo_to_slack.py
#!/usr/bin/python2.7
# module ----
import os
import webbrowser
from datetime import datetime, timedelta
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
import gdata.photos.service
import gdata.media
import gdata.geo
import httplib2
import json
import urllib2
# Google Authetication
def OAuth2Login(client_secrets, credential_store, email):
scope='https://picasaweb.google.com/data/'
user_agent='picasawebuploader'
storage = Storage(credential_store)
credentials = storage.get()
if credentials is None or credentials.invalid:
flow = flow_from_clientsecrets(client_secrets, scope=scope, redirect_uri='urn:ietf:wg:oauth:2.0:oob')
uri = flow.step1_get_authorize_url()
webbrowser.open(uri)
code = raw_input('Enter the authentication code: ').strip()
credentials = flow.step2_exchange(code)
storage.put(credentials)
if (credentials.token_expiry - datetime.utcnow()) < timedelta(minutes=5):
http = httplib2.Http()
http = credentials.authorize(http)
credentials.refresh(http)
gd_client = gdata.photos.service.PhotosService(source=user_agent,
email=email,
additional_headers={'Authorization' : 'Bearer %s' % credentials.access_token})
return gd_client
# main -----
if __name__ == '__main__':
email = os.environ['EMAIL']
confDir = os.path.abspath(os.path.dirname(__file__))
client_secrets = os.path.join(confDir, 'photo-gallery.json')
credential_store = os.path.join(confDir, 'credentials.dat')
gd_client = OAuth2Login(client_secrets, credential_store, email)
albums = gd_client.GetUserFeed()
for album in albums.entry:
print 'Album: %s (%s)' % (album.title.text, album.numphotos.text)
photos = gd_client.GetFeed('/data/feed/api/user/default/albumid/%s?kind=photo' % (album.gphoto_id.text))
for photo in photos.entry:
print(photo.title.text)
f = open(photo.title.text, 'w')
f.write(urllib2.urlopen(photo.content.src).read())
f.close()
Und wenn ich die obige Datei starte,
$ python google_photo_to_slack.py
Wie unten gezeigt, zeigt der Browser eine Fotoseite an und die Konsole fordert Sie auf, den im Browser angezeigten Authentifizierungscode einzugeben.
Enter the authentication code:
Geben Sie den im Browser angezeigten Authentifizierungscode ein, um die Anmeldung abzuschließen.
Noch einmal,
$ python google_photo_to_slack.py
Wenn Sie ausführen, werden alle Fotos in Google Foto heruntergeladen.
Bearbeiten Sie die Google PhotoToSlack-Datei oben wie folgt.
GooglePhotoToSlackBot.py
class GooglePhotoToSlackBot (Plugin):
MEDIA_ARR = []
RANDOM_NUMBER = 0
EMAIL = os.version['EMAIL']
CHANNEL_POST = ''
SLACK_BOT_TOKEN = os.version['SLACK_BOT_TOKEN']
PLUGIN_CHILD_DIRECTORY = os.path.abspath(os.path.dirname(__file__))
PLUGIN_DIRECTORY = os.path.abspath(
os.path.join(PLUGIN_CHILD_DIRECTORY, os.pardir)
)
RTMBOT_DIRECTORY = os.path.abspath(
os.path.join(PLUGIN_DIRECTORY, os.pardir)
)
CLIENT_SECRETS = os.path.join(RTMBOT_DIRECTORY, os.version['SECRET_JSON'])
CREDENTIAL_STORE = os.path.join(
RTMBOT_DIRECTORY, os.version['CREDENTIAL_DAT']
)
def process_message(self, data):
feedback_pattern = re.compile(
#Geben Sie hier die ID des Bots ein, beginnend mit U, das in der API für die Liste der lockeren Benutzer angezeigt wird
r'.*<@UAAAAAAA.*(gallery).*', re.DOTALL | re.IGNORECASE
)
if not (re.match(feedback_pattern, data['text'])):
return
self.CHANNEL_POST = data['channel']
message = u"Das heutige Bild/Ich lade das Video herunter! Bitte warte eine Weile!"
message += "Das Herunterladen von Videos kann einige Zeit dauern."
response = self.slack_client.api_call(
"chat.postMessage",
channel=self.CHANNEL_POST,
text=message,
link_names=1,
as_user=True
)
self.fetch_all_media()
self.post_random_media()
def oauth_login(self, client_secrets, credential_store, email):
scope = 'https://picasaweb.google.com/data/'
user_agent = 'picasawebuploader'
storage = Storage(credential_store)
credentials = storage.get()
now_time = datetime.utcnow()
if credentials is None or credentials.invalid:
flow = flow_from_clientsecrets(
client_secrets,
scope=scope,
redirect_uri='urn:ietf:wg:oauth:2.0:oob'
)
uri = flow.step1_get_authorize_url()
webbrowser.open(uri)
code = raw_input('Enter the authentication code: ').strip()
credentials = flow.step2_exchange(code)
storage.put(credentials)
if (credentials.token_expiry - now_time) < timedelta(minutes=5):
http = httplib2.Http()
http = credentials.authorize(http)
credentials.refresh(http)
gd_client = gdata.photos.service.PhotosService(
source=user_agent,
email=email,
additional_headers={
'Authorization': 'Bearer %s' % credentials.access_token
}
)
return gd_client
def fetch_all_media(self):
gd_client = self.oauth_login(
self.CLIENT_SECRETS,
self.CREDENTIAL_STORE,
self.EMAIL
)
albums = gd_client.GetUserFeed()
for album in albums.entry:
medias = gd_client.GetFeed(
'/data/feed/api/user/default/albumid/%s' %
(album.gphoto_id.text)
)
for media in medias.entry:
self.MEDIA_ARR.append(media)
def get_random_number_in_array(self, arr):
max_length = len(arr)
return random.randint(0, max_length)
def post_random_media(self):
self.RANDOM_NUMBER = self.get_random_number_in_array(self.MEDIA_ARR)
media_object = self.MEDIA_ARR[self.RANDOM_NUMBER]
media_file = open(media_object.title.text, 'wb')
media_file.write(response.content)
media_file.close()
media_path = self.RTMBOT_DIRECTORY + "/" + media_object.title.text
with open(media_path, 'rb') as f:
param = {
'token': self.SLACK_BOT_TOKEN,
'channels': self.CHANNEL_POST,
'title': u'Today\'s ' + media
}
r = requests.post(
"https://slack.com/api/files.upload",
params = param,
files = {'file': f}
)
Geben Sie dann im Verzeichnis rtmbot den Befehl rtmbot ein, um den rtmbot-Server zu starten. Geben Sie dann in Slack @gallery ein. (Jeder Kanal ist in Ordnung.)
$ rtmbot
Laden Sie das heutige Bild / Video im obigen Code herunter! Bitte warte eine Weile! Wenn das Foto in die Lücke fließt, ist der Fotobot fertig !!
Ich habe auf Github mit verschiedenen Funktionen gepostet (z. B. Löschen von Fotos, um keine heruntergeladenen Fotos zu sammeln). Ich hoffe, Sie können es sehen, wenn Sie interessiert sind. https://github.com/romukey/PythonAlgorithm/blob/master/google_gallery/plugins/google_photo_to_slack.py
Picasa-Web-API-Dokumentation https://developers.google.com/picasa-web/docs/1.0/developers_guide_python
So melden Sie sich für Google OAuth an https://stackoverflow.com/questions/30474269/using-google-picasa-api-with-python
Recommended Posts