Python3.4 Bottle IntelliJ Faites quelque chose sur Twitter
python3.4, construction de l'environnement Intellij Étudier l'utilisation de base de la bouteille Modèle jinja2 facile à utiliser modularisation
Du résultat, il a échoué
Il existe de nombreuses bibliothèques Twitter, mais l'API Web n'envoie que du JSON Seul Auth se fait dans la librairie, et le reste consiste à faire une requête HTTP directement Contrairement à la bibliothèque Twitter, elle peut également être utilisée pour d'autres autorisations telles que Facebook et Google+
J'ai donc décidé d'utiliser Requests-OAuthlib
Comme d'habitude,
import requests_oauthlib
Et importez avec IntelliJ Non trouvé et ne peut pas être résolu!
J'ai essayé diverses choses, mais j'ai finalement renoncé à l'utiliser avec IntelliJ Pour installer avec pip et démarrer à partir de la ligne de commande
Tout d'abord, inscrivez-vous à l'API Twitter et consumer_key, consumer_secret, access_token, access_token_secret Veuillez obtenir et régler
python
import os
import bottle
import jinja2
import requests_oauthlib
from requests_oauthlib import OAuth1Session
from bottle import route, post, request, run
from bottle import TEMPLATE_PATH, jinja2_template as template
base_url = "https://api.twitter.com/1.1/"
update_url="statuses/update.json"
consumer_key="hoge"
consumer_secret="hoge"
access_token="hoge"
access_token_secret="hoge"
TEMPLATE_PATH.append("./template")
class Twitter:
def __init__(self, consumer_key, consumer_secret, access_token, access_token_secret):
self.twitter_ = OAuth1Session(consumer_key, consumer_secret, access_token, access_token_secret)
def update(self, msg):
param="{'status:': '" + msg + "'}"
return(self.twitter_.post(base_url+update_url, param))
@route('/')
def HomeHandler_():
return template("home.j2", posts="Obtenez bientôt la chronologie")
@post('/1/twitter/post')
def UpdateHandler_():
global twitter_
msg = request.forms.get('status')
print("post:"+msg)
req = twitter_.update(msg)
return template("home.j2", posts="Obtenez bientôt la chronologie")
twitter_ = Twitter(secret.consumer_key, secret.consumer_secret, secret.access_token, secret.access_token_secret)
if __name__ == "__main__":
run(host='localhost', port=1046, debug=True, reloader=True)
home.j2
{% extends "base.j2" %}
{% block content %}
<div id="postform">
<form method="POST" action="/1/twitter/post">
<table>
<tr><td><textarea cols="70" rows="3" name="status"></textarea></td></tr>
<tr><td align="right"><input type="submit" name="doit" value="Update"></td></tr>
</table>
</form>
</div>
<h2>Timeline</h2>
<i>aaa</i><br>
{% for post in posts %}
{{ post }}
{% endfor %}
{% endblock %}
J'ai l'impression que le code est fait correctement. Ça ne marche pas. ..
J'ai fait de mon mieux pendant environ 2 heures, mais je ne pouvais pas bien tweeter, alors j'abandonne
Tweepy Vous pouvez facilement changer de bibliothèque. J'ai beaucoup rencontré, mais d'une manière ou d'une autre J'ai opté pour une bibliothèque appelée Tweepy. Je n'ai pas de raison Au fait, il sera modulaire
Le nom du module sera Twitter.py le principal est
import Twitter
Ajouter
Ajoutez l'espace de noms du nom du module à la partie Twitter.hoge Changez pour Twitter.Twitter.hoge
Twitter.py
# -*- encoding: utf-8 -*-
import tweepy
__author__ = 'miyatake_y'
base_url = "https://api.twitter.com/1.1/"
update_url="statuses/update.json"
class Twitter:
def __init__(self, consumer_key, consumer_secret, access_token, access_token_secret):
self.auth_ = tweepy.OAuthHandler(consumer_key,consumer_secret)
self.auth_.set_access_token(access_token,access_token_secret)
self.twitter_ = tweepy.API(self.auth_)
def update(self, msg):
print("Twitter.update:" + msg)
return(self.twitter_.update_status(status=msg))
Vous pouvez maintenant POSTER depuis le formulaire! De plus, il peut être utilisé depuis IntelliJ! Mais le japonais est brouillé. La prochaine fois, je traiterai de ça
C'était très simple. Tout ce que vous avez à faire est d'appeler decode () sur demande
msg = request.forms.decode().get('status')
Vous pouvez désormais publier en japonais!
Obtenir la chronologie est facile Immédiatement avec Tweepy
twitter_.home_timeline()
Ensuite, une liste d'objets d'état est renvoyée. Les arguments sont le nombre de tweets récupérés, à partir de quel numéro, etc. Par défaut, 20 seront importés du dernier
print(twitter_.home_timeline()[0].text)
Si tel est le cas, le dernier texte du Tweet sera affiché En plus du texte, l'objet d'état contient également d'autres données telles que l'heure.
Cette fois, j'ai une liste de délais Passer la liste au moteur de template jinja2 Pour boucler dans le modèle
Ajout d'une méthode à la classe Twitter. Maintenant que j'y pense, j'ai pensé que ce serait plus facile d'utiliser Tweepy live.
Twitter.py
def home_timeline(self):
return(self.twitter_.home_timeline())
Donner une liste de statuts comme argument au modèle
main.py
return template("home.j2", posts=twitter_.home_timeline())
Et tournez le modèle avec pour
home.j2
{% for post in posts %}
{{ post.text }} <br><hr>
{% endfor %}
Vous pouvez maintenant voir la chronologie! !!
Affichez votre POST. modèle Je veux augmenter l'API, donc c'est un ami. Obtenez ACCESS TOKEN par programmation
Recommended Posts