def getFavID(usrid): #ユーザIDを渡すとユーザのお気に入り(ストックした記事)の全ての記事のIDをリストにして返します client = QiitaClient(access_token='ebad5a802a2846451a75579069d0bec6364d0c69') idList = [] favList = client.list_user_stocks(usrid).to_json() for fav in favList: idList.append(fav['id']) return idList
def getTag(idList): #記事IDをリストで渡すとリスト上全ての記事のタグをキーワードで返します client = QiitaClient(access_token='ebad5a802a2846451a75579069d0bec6364d0c69') words = [] for articleid in idList: item = client.get_item(articleid).to_json() for i in item['tags']: words.append(i['name']) return words
def get_particular_article(id): client = QiitaClient(access_token=TOKEN) # 特定のユーザーの投稿記事一覧を取得 res_user = client.list_user_items(id) article_list = res_user.to_json() for article in article_list: for tags in article['tags']: if tags['name'] == 'QiitaAPI': print(article['title'])
def __init__(self, access_token, slack_web_hook_url=None, twitter_keys=None): self.access_token = access_token self.resrvation_items = [] self.client = QiitaClient(access_token=access_token) self._get_all_items() print(f'all_items: {len(self.items)}') self.slack = None if slack_web_hook_url is not None: self.slack = slackweb.Slack(url=slack_web_hook_url) self.twitter = None if twitter_keys is not None: tw_auth = twitter.OAuth( consumer_key=twitter_keys['twitter_api_key'], consumer_secret=twitter_keys['api_secret_key'], token=twitter_keys['access_token'], token_secret=twitter_keys['access_token_secret']) self.twitter = twitter.Twitter(auth=tw_auth)
def handle(self, *args, **options): print("running get_tags batch ...") client = QiitaClient(access_token=QIITA_ACCESS_TOKEN) for i in range(100): page = i + 1 try: response = client.list_tags(params='page=' + str(page) + '&per_page=100&sort=count') except QiitaResponse: print('page: ' + page) pass else: response_json = response.to_json() for tag_json in response_json: Tag.objects.update_or_create( tag_id=tag_json['id'], defaults={ 'followers_count': tag_json['followers_count'], 'icon_url': tag_json['icon_url'], 'items_count': tag_json['items_count'], }) print('finished.')
from qiita_v2.client import QiitaClient config_file = "config.yaml" user_name = "naomori" client = QiitaClient(config_file=config_file) response = client.get_user(user_name) print(response.to_json())
import os import json from qiita_v2.client import QiitaClient params_file_path = 'item/params.json' body_file_path = 'item/README.md' item_id_file_path = 'item/ITEM_ID' client = QiitaClient(access_token='dummy') headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer {}'.format(os.environ['QIITA_TOKEN']) } with open(params_file_path) as f: params = json.load(f) with open(body_file_path) as f: params['body'] = f.read() if os.path.exists(item_id_file_path): with open(item_id_file_path) as f: item_id = f.read() res = client.update_item(item_id, params, headers) # print(res.to_json()) else: res = client.create_item(params, headers) # print(res.to_json())
def handle(self, *args, **options): print("running get_users batch ...") client = QiitaClient(access_token=settings.QIITA_ACCESS_TOKENS[0]) users = User.objects.all() User.objects.all() counter = 0 for user in users: counter += 1 if counter == 1000: print('1000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[1]) elif counter == 2000: print('2000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[2]) elif counter == 3000: print('3000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[3]) elif counter == 4000: print('4000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[4]) elif counter == 5000: print('5000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[5]) elif counter == 6000: print('6000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[6]) elif counter == 7000: print('7000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[7]) elif counter == 8000: print('8000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[8]) elif counter == 9000: print('9000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[9]) elif counter == 10000: print('10000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[10]) elif counter == 11000: print('11000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[11]) elif counter == 12000: print('12000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[12]) elif counter == 13000: print('13000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[13]) elif counter == 14000: print('14000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[14]) elif counter == 15000: print('15000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[15]) elif counter == 16000: print('16000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[16]) elif counter == 17000: print('17000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[17]) elif counter == 18000: print('18000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[18]) elif counter == 19000: print('19000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[19]) elif counter > 20000: print('20000 calls finished.') counter = 1 print('wait for 1 hour. --------------------') time.sleep(3600) print('1 hour has passed. --------------------') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[0]) try: response = client.get_user(id=user.user_id) except Exception: print(sys.exc_info()[1]) # User.objects.get(user_id=user.user_id).delete() # print(user.user_id,' deleted.') else: response_json = response.to_json() description = response_json['description'] facebook_id = response_json['facebook_id'] github_login_name = response_json['github_login_name'] linkedin_id = response_json['linkedin_id'] twitter_screen_name = response_json['twitter_screen_name'] location = response_json['location'] if description == None: description = '' if facebook_id == None: facebook_id = '' if github_login_name == None: github_login_name = '' if linkedin_id == None: linkedin_id = '' if twitter_screen_name == None: twitter_screen_name = '' if location == None: location = '' User.objects.update_or_create( user_id=response_json['id'], defaults={ 'description': description, 'facebook_id': facebook_id, 'followees_count': response_json['followees_count'], 'followers_count': response_json['followers_count'], 'github_login_name': github_login_name, 'items_count': response_json['items_count'], 'linkedin_id': linkedin_id, 'location': location, 'name': response_json['name'], 'organization': response_json['organization'], 'permanent_id': response_json['permanent_id'], 'profile_image_url': response_json['profile_image_url'], 'twitter_screen_name': twitter_screen_name, 'website_url': response_json['website_url'], }) print('finished. at: ', datetime.now())
class ReservationPostQiitaClient(object): def __init__(self, access_token, slack_web_hook_url=None, twitter_keys=None): self.access_token = access_token self.resrvation_items = [] self.client = QiitaClient(access_token=access_token) self._get_all_items() print(f'all_items: {len(self.items)}') self.slack = None if slack_web_hook_url is not None: self.slack = slackweb.Slack(url=slack_web_hook_url) self.twitter = None if twitter_keys is not None: tw_auth = twitter.OAuth( consumer_key=twitter_keys['twitter_api_key'], consumer_secret=twitter_keys['api_secret_key'], token=twitter_keys['access_token'], token_secret=twitter_keys['access_token_secret']) self.twitter = twitter.Twitter(auth=tw_auth) def _get_all_items(self): self.items = [] params = { 'page': 1, 'per_page': 100 } while True: items = self.client.get_authenticated_user_items(params=params) self.items.extend(items.to_json()) params['page'] += 1 if 'next' not in items.links: break def get_reservation_items(self, reservation_keyword): self.resrvation_items = [] # 限定共有投稿に絞り込む private_items = list(filter(lambda x: x['private'] == True, self.items)) print(f'private items: {len(private_items)}') # 投稿日時の指定コメントされている投稿に絞り込む comments_items = list(filter( lambda x: x['comments_count'] > 0 and reservation_keyword not in x['title'], private_items)) print(f'commented items: {len(comments_items)}') # 記事コメントに予約投稿キーワードが含まれる記事を取得する resrvation_comment_items = [] for item in comments_items: comments = self.client.list_item_comments(item['id']).to_json() resrvation_comments = list(filter(lambda x: reservation_keyword in x['body'], comments)) if len(resrvation_comments) > 0: resrvation_comment_items.append(item) print(f'resrvation comment items: {len(resrvation_comment_items)}') # タイトルに予約投稿キーワードが含まれる記事を取得する resrvation_title_items = [] title_items = list(filter(lambda x: reservation_keyword in x['title'], private_items)) # タイトルから予約投稿キーワードを除外しておく for item in title_items: item['title'] = item['title'].replace(reservation_keyword, '') print(f'resrvation title items: {len(title_items)}') # コメント・タイトルそれぞれから取得した記事をまとめる self.resrvation_items.extend(resrvation_comment_items) self.resrvation_items.extend(title_items) print(f'resrvation items: {len(title_items)}') def post_items(self): for item in self.resrvation_items: # 記事を公開投稿する postParams = {} for key in ['title', 'body', 'tags']: postParams[key] = item[key] postParams['private'] = False post_res = self.client.create_item(postParams) if post_res.status != 201: print(f'error status: {post_res.status}') # エラーの場合はとりあえず落とす return new_item = post_res.to_json() print('posted: ' + new_item['title']) # 限定共有投稿を削除する del_res = self.client.delete_item(item['id']) if del_res.status != 204: print(f'error status: {post_res.status}') print('deleted: ' + item['title']) # twitterに投稿する self._twitter_statuses_update(f'''{new_item['title']} on @Qiita {new_item['url']} ''') # slackに通知する self._slack_notify(f'''Qiitaに投稿しました {new_item['title']} {new_item['url']} ''') def _slack_notify(self, text): if self.slack is None: return self.slack.notify(text=text) print(f'slack.notify: {text}') def _twitter_statuses_update(self, status): if self.twitter is None: return self.twitter.statuses.update(status=status) print(f'twitter.statuses.update: {status}')
def __init__(self, access_token): self.access_token = access_token self.qiita_client = QiitaClient(access_token=access_token)
class MyQiitaClient: """My Qiita Client.""" def __init__(self, access_token): self.access_token = access_token self.qiita_client = QiitaClient(access_token=access_token) def _get_all_pages(self, func, user_id): """ページ分けされたレスポンスを巡回してすべてのアイテムを取得します.""" QIITA_ITEMS_PER_PAGE = 100 QIITA_MAX_PAGE = 100 results = [] for i in range(1, QIITA_MAX_PAGE + 1): res = func( user_id, params={'page': i, 'per_page': QIITA_ITEMS_PER_PAGE}) t = res.to_json() results.extend(t) if len(t) < QIITA_ITEMS_PER_PAGE: # last page break return results def get_following_tags(self, user_id): """ ユーザがフォローしているタグ一覧をフォロー日時の降順で返します. GET /api/v2/users/:user_id/following_tags https://qiita.com/api/v2/docs#get-apiv2usersuser_idfollowing_tags """ func = self.qiita_client.list_user_following_tags return self._get_all_pages(func, user_id) def get_followees(self, user_id): """ ユーザがフォローしているユーザ一覧を取得します. GET /api/v2/users/:user_id/followees https://qiita.com/api/v2/docs#get-apiv2usersuser_idfollowees """ func = self.qiita_client.list_user_followees return self._get_all_pages(func, user_id) def get_user_id(self): """ Qiitaのuser_idを返します. アクセストークンに紐付いたユーザを返します。 GET /api/v2/authenticated_user https://qiita.com/api/v2/docs#get-apiv2authenticated_user """ res = self.qiita_client.get_authenticated_user() user_id = (res.to_json())['id'] return user_id def get_following_tag_feed_urls(self, user_id): """Qiitaでフォローしているタグに対応するfeed urlのリストを返します.""" tags = self.get_following_tags(user_id) tag_feed_urls = [tag_feed_url_from_tag_id(tag['id']) for tag in tags] return tag_feed_urls def get_followees_feed_urls(self, user_id): """Qiitaでフォローしているユーザーに対応するfeed urlのリストを返します.""" followees = self.get_followees(user_id) user_feed_urls = [user_feed_url_from_user_id(followee['id']) for followee in followees] return user_feed_urls
def main(): _USAGE = ''' Qiita API CLI Usage: qiita init qiita create_access_token [--params=<kn> --headers=<kn>] qiita create_item [--params=<kn> --headers=<kn>] qiita create_item_comment <item_id> [--params=<kn> --headers=<kn>] qiita delete_access_token <token> [--params=<kn> --headers=<kn>] qiita delete_comment <id> [--params=<kn> --headers=<kn>] qiita delete_item <id> [--params=<kn> --headers=<kn>] qiita follow_tag <id> [--params=<kn> --headers=<kn>] qiita follow_user <user_id> [--params=<kn> --headers=<kn>] qiita get_authenticated_user [--params=<kn> --headers=<kn>] qiita get_authenticated_user_items [--params=<kn> --headers=<kn>] qiita get_comment <id> [--params=<kn> --headers=<kn>] qiita get_item <id> [--params=<kn> --headers=<kn>] qiita get_item_stock <item_id> [--params=<kn> --headers=<kn>] qiita get_tag <id> [--params=<kn> --headers=<kn>] qiita get_tag_following <id> [--params=<kn> --headers=<kn>] qiita get_user <id> [--params=<kn> --headers=<kn>] qiita get_user_following <user_id> [--params=<kn> --headers=<kn>] qiita list_item_comments <item_id> [--params=<kn> --headers=<kn>] qiita list_item_stockers <item_id> [--params=<kn> --headers=<kn>] qiita list_items [--params=<kn> --headers=<kn>] qiita list_tag_items <id> [--params=<kn> --headers=<kn>] qiita list_tags [--params=<kn> --headers=<kn>] qiita list_user_followees <user_id> [--params=<kn> --headers=<kn>] qiita list_user_followers <user_id> [--params=<kn> --headers=<kn>] qiita list_user_following_tags <user_id> [--params=<kn> --headers=<kn>] qiita list_user_items <user_id> [--params=<kn> --headers=<kn>] qiita list_user_stocks <user_id> [--params=<kn> --headers=<kn>] qiita list_users [--params=<kn> --headers=<kn>] qiita stock_item <item_id> [--params=<kn> --headers=<kn>] qiita unfollow_tag <id> [--params=<kn> --headers=<kn>] qiita unfollow_user <user_id> [--params=<kn> --headers=<kn>] qiita unstock_item <item_id> [--params=<kn> --headers=<kn>] qiita update_comment <id> [--params=<kn> --headers=<kn>] qiita update_item <id> [--params=<kn> --headers=<kn>] Options: --help ヘルプを表示 --params=<kn> params [default: None] --headers=<kn> headers [default: None] ''' all_params = docopt(_USAGE) command = [k for k, v in all_params.items() if v == True] params = [ v for k, v in all_params.items() if re.match(r'\<.*\>', k) and v is not None ] options = [ json.loads(v) for k, v in all_params.items() if re.match(r'^\-', k) and v != 'None' ] params.extend(options) is_init = command[0] == 'init' access_token = get_access_token(is_init) if access_token is None and is_init == False: print('利用するにはQiitaのreadとwriteが許可されたアクセストークンが必要です') print('アクセストークンを取得するにはQiitaにログインして下記のURLへアクセスしてください') print('https://qiita.com/settings/tokens/new') return if is_init: return client = QiitaClient(access_token=access_token) res = getattr(client, command[0])(*params) print(json.dumps(res.to_json(), ensure_ascii=False))
def handle(self, *args, **options): print("running get_items_date batch ...") client = QiitaClient(access_token=settings.QIITA_ACCESS_TOKENS[0]) start_date = datetime.strptime('2011-09-16', '%Y-%m-%d') today = datetime.today() days_15 = timedelta(days=+15) counter = 0 while start_date < today: end_date = start_date + days_15 for i in range(100): # skip if the items_count and the item_set.count() is the same. if counter == 1000: print('1000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[1]) elif counter == 2000: print('2000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[2]) elif counter == 3000: print('3000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[3]) elif counter == 4000: print('4000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[4]) elif counter == 5000: print('5000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[5]) elif counter == 6000: print('6000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[6]) elif counter == 7000: print('7000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[7]) elif counter == 8000: print('8000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[8]) elif counter == 9000: print('9000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[9]) elif counter == 10000: print('10000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[10]) elif counter == 11000: print('11000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[11]) elif counter == 12000: print('12000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[12]) elif counter == 13000: print('13000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[13]) elif counter == 14000: print('14000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[14]) elif counter == 15000: print('15000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[15]) elif counter == 16000: print('16000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[16]) elif counter == 17000: print('17000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[17]) elif counter == 18000: print('18000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[18]) elif counter == 19000: print('19000 calls finished.') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[19]) elif counter > 20000: print('20000 calls finished.') counter = 1 print('wait for 1 hour. --------------------') time.sleep(3600) print('1 hour has passed. --------------------') client = QiitaClient( access_token=settings.QIITA_ACCESS_TOKENS[0]) params = 'page=' + str( i + 1 ) + '&per_page=100' + '&query=created:>=' + start_date.strftime( '%Y-%m-%d') + '+created:<' + end_date.strftime('%Y-%m-%d') try: counter += 1 response = client.list_items(params=params) except: print(sys.exc_info()[1]) else: response_json = response.to_json() for item_json in response_json: created_at = item_json[ 'created_at'] # ignore timezone. not sure about the problem. created_at = datetime.strptime( ''.join(created_at.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z') updated_at = item_json['updated_at'] updated_at = datetime.strptime( ''.join(updated_at.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z') auther = item_json['user']['id'] auther = User.objects.get_or_create(user_id=auther)[0] try: Item.objects.update_or_create( item_id=item_json['id'], defaults={ "rendered_body": item_json['rendered_body'], "body": item_json['body'], "comments_count": item_json['comments_count'], "created_at": created_at, "likes_count": item_json['likes_count'], "reactions_count": item_json['reactions_count'], "title": item_json['title'], "updated_at": updated_at, "url": item_json['url'], "user": auther, }) item = Item.objects.get(item_id=item_json['id']) tags_json = item_json['tags'] for tag_json in tags_json: Tag.objects.get_or_create( tag_id=tag_json['name']) tag = Tag.objects.get(tag_id=tag_json['name']) item.tags.add(tag) item.save() except Exception: traceback.print_exc() print(params, ' saved item count: ', len(response_json)) if len(response_json) < 100: break start_date += days_15 print('finished. at: ', datetime.now())
def qiitaPyGetClient(): global client if client is None: client = QiitaClient(config_file=config_file_path) return client