質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.59%

teratailのクリップ検索

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 1,223
退会済みユーザー

退会済みユーザー

*困っていること
teratailで気になること、後で読み返したいこと、忘れそうなことはクリップするようにしています。結果、忘れっぽいので膨大な数のクリップがたまっている状態です。

下記のsuyamaさんのアドバイスを受け、teratailのAPIを使ってデータを取得出来るところまできましたが、件数が20件に絞られています。
(「○○件中20件を検索したよ」のような情報は応答のjson形式の"meta"に収まっているようでした。)

*やりたいこと
サラッと検索できるような方法がありましたら教えていただけないでしょうか?

*調べたこと
少し前にteratail の過去遺産をもっと活用したいという記事があり、APIに目を通しましたが「クリップの検索」はないようでした。


teratailから提供されているAPIの、Python3での検証コード

  • 1)
    検証時にChromeでURLを直接開くと問題はなかったのですが、Pythonでそのまま走らせるとteratailのAPIがSSLの認証エラーではじかれました。なので、'ssl._create_default_https_context = ssl._create_unverified_context'のくだりを入れています。これはteratailのSSLの設定がおかしい?ということなのでしょうか…
     
  • 2)
    やりすぎるとAPIから403されてしまいます。もし試される方が居ましたらやりすぎには気を付けてください。

2017-10-31 コード修正
suyamaさんのアドバイスを受け、ページをクロールしながらタイトルを拾えるところまでできました。ここまでできればあとはwxPythonか何かでGUIをつければOKですね。ここで一区切りにします。Pythonで検索しようとしている人の参考までにコードを載せます。

# coding: UTF-8
import os
import urllib.request
import json
import ssl
import sys

USER_NAME = "slash"

# -------------------
# To avoid an error
# ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)
ssl._create_default_https_context = ssl._create_unverified_context

URL = "https://teratail.com/api/v1/users/" + USER_NAME + "/clips?limit=100&page="

# -------------------

def downloader(page):
    try:
        # Get clip data from teratail
        with urllib.request.urlopen(URL + str(page)) as response:
            html = response.read()
            text = html.decode('utf-8')

        # Load clip data as json file
        json_dat = json.loads(text)
        # print(json.dumps(json_dat, sort_keys = True, indent = 4)

        # Return clip data as dict type
        return json_dat["meta"], json_dat["questions"]
    except:
        sys.exit("The process was terminated. You may got 403 error caused by excess access [30 access / hour * IP address].")

def crop_titles(lst_questions):
    # Crop dictionary from list
    for dct in lst_questions:
        # print( dct["created"] + " " + dct["title"])
        print(dct["title"])

if __name__ == "__main__":
    # Initialize page index
    page = 1
    page_max = 1

    # Crawl each pages
    while page <= page_max:
        meta, title = downloader(page)
        page_max = meta["total_page"]
        crop_titles(title)
        page = page + 1
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+3

特定のユーザーのクリップした質問一覧を取得する
http://docs.teratailv1.apiary.io/#reference/(user)/3

上記のAPIを使って自作するのが一番かと思います。


追記:

まだ作りかけですが、ご参考まで実装してみました。
https://www.suyama.pw/teratail/clipsearch.html

アクセストークンの設定部分、複数ページを取得する部分、エラー処理等が未実装です。
また、どのような検索をしたいかによっても作りが変わってくるかと思いますが、とりあえずはタイトルの検索のみ対応してみています。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/30 07:33

    また、アクセストークンを使用しない場合は同一IPから1時間に30回までのアクセス制限が課されています。
    アクセストークン管理からアクセストークンを発行することで、1トークンあたり1時間300件のAPIリクエストを行うことが可能です。
    1アカウントにつきアクセストークンは10個まで申請できるので、最大で1時間3000件のリクエストが可能です。

    キャンセル

  • 2017/10/30 11:48

    teratail APIのエンドポイントにアクセスした際に証明書エラーとなる点は、Qualys SSL LabsのSSL Server Testで"Chain issues: Incomplete"と判定されるため、teratail側で中間証明書の設定が不足していることが考えられます。
    使用している証明書自体は正規のものですので、どのように対応するかは各API利用者の判断かと思います。

    キャンセル

  • 2017/10/30 18:36

    細かい説明までいただきありがとうございます。普段スタンドアロンでのコーディングばかりしていたので、まったくもって不足している部分のお話でした。やりたかったことは、タイトル検索で忘れたことを拾い上げるつもりでしたので、まさに提供いただいたURLと全く同じものです。こんなに早く「形」が見られると思っていませんでしたのでとても驚いています。
    自前でもローカルで出来るように挑戦します。本当にありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る