Beispiel #1
0
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
Beispiel #2
0
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'])
Beispiel #4
0
  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)
Beispiel #5
0
    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.')
Beispiel #6
0
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())
Beispiel #7
0
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())
Beispiel #8
0
    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())
Beispiel #9
0
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}')
Beispiel #10
0
 def __init__(self, access_token):
     self.access_token = access_token
     self.qiita_client = QiitaClient(access_token=access_token)
Beispiel #11
0
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
Beispiel #12
0
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))
Beispiel #13
0
    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())
Beispiel #14
0
def qiitaPyGetClient():
    global client
    if client is None:
        client = QiitaClient(config_file=config_file_path)
    return client