# -*- coding: utf-8 -*-
from tweepy import OAuthHandler
import datetime
import pandas as pd
import tweepy
import time
import random
import traceback
from dbs.db import * class Twitter_Spider():
def __init__(self):
self.main_tw_url="https://twitter.com/{}/status/{}"
self.china_time_list = []
self.twitter_id_list = []
self.twitter_url_list = []
self.twitter_text_list = []
self.twitter_url_list = []
self.update_time_list = []
self.twitter_dicts = {}
self.user_id_list = []
self.user_name_list = []
self.crate_time_list=[]
self.userdicts={}
self.stopflag=False def getapi(self):
consumer_key = 'IAaj345Xf673kzT2'
consumer_secret = 'ee9WEQ235555We0gP4peRbOPeeHGX1'
access_token = '9767625356VEnq7s9ZXOHEI'
access_secret = 'lyqj2122333o9G4fHta'
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)
return api def start(self):
api =None
try:
api = self.getapi()
except tweepy.TweepError:
print('Error! Failed to get access token.') nowdate = datetime.datetime.now()
beforeweek=nowdate-datetime.timedelta(days=7) #一周前
#只获取关注者id
# ids = []
# for page in tweepy.Cursor(api.friends_ids).pages():
# ids.extend(page)
# 获取关注者id和screen_name for pages in tweepy.Cursor(api.friends).pages():
for page in pages:
userstr = page._json
self.userdicts.setdefault(userstr.get("id"),userstr.get("screen_name"))
for user_id in self.userdicts.keys():
self.stopflag=False
self.twitter_dicts.clear()
for i,statuslist in enumerate(tweepy.Cursor(api.user_timeline, id=user_id).pages()): #获取第一页,一页20个
if not self.stopflag:
print("start page:{}".format(i))
for status in statuslist:
jsonstr = status._json
if self.getItem(jsonstr,beforeweek,user_id):
break
else:
break
time.sleep(random.randint(2, 6))
self.twitter_dicts.setdefault("user_id", self.user_id_list)
self.twitter_dicts.setdefault("user_name", self.user_name_list)
self.twitter_dicts.setdefault("china_time",self.china_time_list)
self.twitter_dicts.setdefault("tw_time", self.crate_time_list)
self.twitter_dicts.setdefault("tw_id", self.twitter_id_list)
self.twitter_dicts.setdefault("tw_text", self.twitter_text_list)
self.twitter_dicts.setdefault("tw_url", self.twitter_url_list)
self.twitter_dicts.setdefault("updatetime", self.update_time_list)
try:
SaveData().save_object_data(self.twitter_dicts)
except:
print(traceback.format_exc("insert db error")) def getItem(self, jsonstr,beforeweek,user_id):
create_time = jsonstr.get("created_at")
china_time=""
try:
china_time=datetime.datetime.strptime(create_time,"%a %b %d %H:%M:%S +0000 %Y")
if beforeweek>china_time:
self.stopflag=True
return self.stopflag
except:
print(traceback.format_exc())
screen_name=self.userdicts.get(user_id)
self.china_time_list.append(china_time)
self.crate_time_list.append(create_time)
self.user_id_list.append(user_id)
self.user_name_list.append(screen_name)
twitter_id = jsonstr.get("id")
self.twitter_id_list.append(twitter_id)
self.twitter_url_list.append(self.main_tw_url.format(screen_name,twitter_id))
twitter_text = jsonstr.get("text")
print(twitter_text)
self.twitter_text_list.append(twitter_text)
self.update_time_list.append(datetime.datetime.now())
return self.stopflag if __name__ == "__main__":
Twitter_Spider().start()

  

twitter api的使用获取关注者的时间线的更多相关文章

  1. twitter api

    1,twurl安装 1.1,安装软件管理包工具,在管理员身份打开的cmd中执行: @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powersh ...

  2. Twitter API 申请key

    最近听了一下coursera的python课(https://www.coursera.org/learn/python-network-data/home/welcome),讲的挺简单也挺有意思.其 ...

  3. Twitter API升级至1.1

    Twitter API 1.1是至今最大的一次升级,从3月份提出,到6月11日1.0版本已经全面停止调用.关于1.1版本升级特性可访问: https://dev.twitter.com/docs/ap ...

  4. 【百度地图API】如何获取行政区域的边界?

    原文:[百度地图API]如何获取行政区域的边界? 摘要:以前教过大家如何自行获取行政区域,或者自定义获取一个区域的边界值.今天来教大家直接调用百度地图API1.3(目前最新版本)来获取行政区域的边界值 ...

  5. 【百度地图API】自行获取区域经纬度的工具

    原文:[百度地图API]自行获取区域经纬度的工具 摘要:上一章教大家如何建立自己的行政区域地图.这次为大家提供一个,可视化选择区域,并且能自动生成经纬度代码的工具.工具的源代码完全公开,并且做了详尽的 ...

  6. 百度地图API地点搜索-获取经纬度

    分享一下地图上的地点搜索和鼠标点击获取地点经纬度,这些都是地图比较基本和实用的代码,其中还包括了根据用户IP进行地图的显示.改变地图上的鼠标样式.启用滚轮缩放等,算是半入门吧,其他的一些可以自己参考百 ...

  7. 简单几行代码使用百度地图API接口分页获取信息

    首发于: 万能助手扩展开发:使用百度地图API接口分页获取信息_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=426 使用 ...

  8. 【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID

    问题描述 在Azure开发中,我们时常面临获取Authorization问题,需要使用代码获取到Access Token后,在调用对应的API,如servicePrincipals接口. 如果是直接调 ...

  9. 设计Twitter 时间线

    「design Twitter」是 LeetCode 上第 335 道题目,不仅题目本身很有意思,而且把合并多个有序链表的算法和面向对象设计(OO design)结合起来了,很有实际意义,本文就带大家 ...

随机推荐

  1. 给Python初学者的一些编程建议

    Python是一种非常富有表现力的语言.它为我们提供了一个庞大的标准库和许多内置模块,帮助我们快速完成工作.然而,许多人可能会迷失在它提供的功能中,不能充分利用标准库,过度重视单行脚本,以及误解Pyt ...

  2. PAT 1020 月饼

    https://pintia.cn/problem-sets/994805260223102976/problems/994805301562163200 月饼是中国人在中秋佳节时吃的一种传统食品,不 ...

  3. HDU 2175 汉诺塔IX

    http://acm.hdu.edu.cn/showproblem.php?pid=2175 Problem Description 1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根 ...

  4. 一个flink作业的调优

    最近接手了一个flink作业,另外一个同事断断续续有的没的写了半年的,不着急,也一直没上线,最近突然要上线,扔给我,要调通上线. 现状是: 1.代码跑不动,资源给的不少,但是就是频繁反压. 2.che ...

  5. Maven中mirrors和repository的关系

    一.前言 之前没有搞清楚pom.xml里面配置的repositorys节点配置的仓库和mirrors里面配置的仓库的“镜像”间的关系,特意去搜索了相关内容,这边有篇文章讲得透彻,所以这边转载一下~ 二 ...

  6. EF to linq 左连接

    如果连接的数据不存在用 null 表示,则可以左连接查询,但是如果数据类型为 int 则会出错. var ng = (from g in _db.NET_NEWS_GROUP join z in _d ...

  7. 多线程 定时器 Timer TimerTask

    定时器是一种特殊的多线程,使用Timer来安排一次或者重复执行某个任务 package org.zln.thread; import java.util.Date; import java.util. ...

  8. Python数据分析(三)pandas resample 重采样

    下方是pandas中resample方法的定义,帮助文档http://pandas.pydata.org/pandas-docs/stable/timeseries.html#resampling中有 ...

  9. java中枚举类到高级使用

    参考博文: http://blog.csdn.net/qq_31655965/article/details/55049192 http://www.cnblogs.com/zhaoyanjun/p/ ...

  10. eclipse tomcat 插件

    下载地址http://www.eclipsetotale.com/tomcatPlugin.html#A3