LoginSignup
9
6

More than 5 years have passed since last update.

Qiitaの記事をバックアップしてみたい(C#)

Last updated at Posted at 2018-04-11

きっかけ

Qiitaは便利だから色々投稿してるけど、これが消えたらショックだよなぁ...というのがきっかけ。
「QiitaAPI」を使えば、最低限自分のローカルに記事をバックアップしておくことはできそうだったので、
色々他の方の記事も参考にしながらツールを作ってみることにした(C#)。

アクセストークンを使った認証

アクセストークンをAuthorizationリクエストヘッダに含めることで、認証を行うことができる。
Qiita API v2ドキュメント「認証認可」
アクセストークンは、自分のアカウントの設定画面から発行できる。

使用するAPI

自分の記事一覧を取得する

Qiita API v2ドキュメント「/api/v2/authenticated_user/items」

記事を取得するコード

JSON形式でレスポンスが返ってくる。

コード
public static List<QiitaArticleModel> Execute()
{
    var wc = new WebClient();
    wc.QueryString = new NameValueCollection
    {
        ["page"] = "1",
        ["per_page"] = "20",
    };
    wc.Headers.Add("Authorization", "Bearer " + Constants.QIITA_TOKEN);
    var result = wc.DownloadString(Constants.QIITA_REQUEST_URL_AUTHENTICATED_USER_ITEMS);

    var articleList = JsonConvert.DeserializeObject<List<QiitaArticleModel>>(result);
    return articleList;
}

JSON形式のレスポンスをデシリアライズする

モデルクラスを作成

とりあえずTitleとBodyがあればいいかな、と。

QiitaArticleModel.cs
    public class QiitaArticleModel
    {
        [JsonProperty("title")]
        public string Title { get; set; }
        [JsonProperty("rendered_body")]
        public string RenderedBody { get; set; }
    }

JsonProperty属性を使えば、プロパティ名と異なるキー名をつけることができる。
(レスポンスに含まれるキー名と異なるプロパティ名にしたいことは多々あるから)

実際にデシリアライズ

デシリアライズ処理
var articleList = JsonConvert.DeserializeObject<List<QiitaArticleModel>>(result);

取得した記事をファイル出力

デシリアライズで生成したモデルクラスのリストを、1件ずつ処理してHTMLファイルに出力。
ファイル名に「記事タイトル」、中身はもちろん記事の内容(HTML)。

ファイル出力処理
public static void FileExport(QiitaArticleModel article)
{
    var outputFileName = string.Format("{0}.html", article.Title);
    var encoding = Encoding.GetEncoding("utf-8");
    using (var writer = new StreamWriter(Constants.FILE_OUTPUT_DIRECTORY + outputFileName, true, encoding))
    {
        writer.WriteLine(article.RenderedBody);
        writer.Close();
    }
}

参考

C#でJSONの読み書き~Json.NETを使ってみる~
C#でJSONを扱うライブラリ「Json.NET」を使ってみました

開発状況

2018/4/11:
とりあえず「自分の記事を全部取得する」ところまで。
次はファイルに保存する処理を追加する。
2018/4/21:
JSONで返ってきたレスポンスを、デシリアライズするところを作ってみた。
「HTML形式の本文」を取得しているため、今度はHTMLファイルに出力するところを作ってみる。
2018/4/25:
いったんQiitaに投稿した記事を取得して、ファイル出力するまでの処理はできた。
今後改良したい箇所としては、「HttpClient」を使った実装にしてみるところか...

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6