Googleリーダーのデータを保存しています。 PHPバージョン

お知らせ:この記事は、本格的な記事を装っていません。 Googleリーダーサービスから別の「すべてのデータをポンピングする」、「ここにそのまま残す」というカテゴリのメモがあります。







エントリー



美しいRSSリーダーを閉じるというよく知られた機会に、いくつかの記事がすでに書かれています。

私はこの小さなメモに「インスピレーションを受けました」。また、「python」スクリプトを使用してGReaderからデータを保存するという形で中間ソリューションを提供しました。

実際、この記事の本質はたった1つです。PHPで同様のスクリプトを自分で書いたので(「python」はわかりません)、共有した方がいいと思います。

一方では、誰かが助けてくれるかもしれませんし、他方では、誰かがエラーを指摘したり、何かを忘れたり、未完成のままにしたり、どこかで台無しにしたりして助けてくれるかもしれません。



これは何ですか



Googleリーダーからプルし、履歴を含むすべてのサブスクリプション(絶対に利用可能なすべての投稿)をハードドライブに保存できる1つのファイルのスクリプト。 リーダーでまだ利用可能な「死んだ」サイトからの投稿を含みます。 「はじめに」の上部には、Pythonスクリプトを使用した投稿へのリンクがあります。これは、私が理解しているように、それも実行できます。

このスクリプトは実質的にサードパーティのライブラリを使用しないため、「そこに行ってダウンロードしますが、そこにあります」という追加の設定やクエストは必要ありません。



入手先



スクリプト自体は、GitHubでここで取得できます(おそらく7月に、これはすべて無関係になります)。

1つのスクリプトファイルと1つのバッチファイル(.batファイル)。 スクリプトはWindowsで作成されましたが、どこでも動作するはずです。

Windows版PHPには簡易バージョンがあり、すでにここにあります

一番下の行は、 PHPを使用したスタンドアロンアーカイブで 、任意のフォルダーに展開します(どちらでもかまいません。パスは短く、スペースを入れないことが望ましいです)。たとえば、c:\ php。 bat-nicknameを開始するスクリプトの行、またはc:\ phpにデプロイされている場合は、他に何もする必要はありません(添付されたバッチファイルには登録されているものです)。 さて、 php.netから最新版をダウンロードするか、多くの人がすでにそれを持っています。



残っているのは、phpスクリプトの最初にGoogleで認証データを示し、必要な設定を行い、バッチファイルを開始して、すべてがダウンロードされるまで待つことです。



どのように機能しますか?



これで、スクリプトの説明とそれができること。

手始めに、おそらく非フラッシュcURLライブラリとjson_decode()関数から使用するものを示す必要があります。

私が思うに、cURLは多くのJSON関数でデフォルトでオンになっていますが、それらはPHPの5番目のバージョンから始まりますが、以前のバージョンではスクリプトが動作し、デフォルトでオンになり、この関数を単純なレギュラーに置き換えます。 つまり、「義務」からはcURLのみが残ります。

また、私の良心を明確にするために、サービスの認証コードがこの小さなクラスから取得されることを言及するのは、おそらく場違いではありません。 実際、トークンを取得するためのいくつかの関数のみがそこから取得され、残りはシャベルに入れられ、スクリプトの最後に組み込まれました。



これで設定。 スクリプトの冒頭にあり、次のようになっています。

$GLOBALS['account_user']='googleuser@gmail.com'; $GLOBALS['account_password']='qwerty'; $GLOBALS['is_atom']=true; $GLOBALS['try_consolidate']=true; $GLOBALS['fetch_count']=1000; $GLOBALS['fetch_special_feeds']=true; $GLOBALS['fetch_regular_feeds']=true; $GLOBALS['atom_ext']="atom.xml.txt"; $GLOBALS['json_ext']="json.txt"; $GLOBALS['save_dir']="./feeds/"; $GLOBALS['log_file']=$GLOBALS['save_dir']."log.txt"; $GLOBALS['use_json_decode']=false;//function_exists('json_decode'); /* !!!!!!!!!! */ $GLOBALS['need_readinglist']=false; /* !!!!!!!!!! important! this will fetch a very full feed list, mixed from all subscribtions and ordered by post date. in most cases this data is unusefull and this option will double the script worktime and the hdd space requirement. so probably you don't need set this to true. !!!!!!!!!! */
      
      







ログインとパスワードを入力する場所、それは明らかだと思います)

私にとっては、Googleアカウントに対して2段階認証が設定されているため、「アプリケーションパスワード」はスクリプトで正常に機能します。



残り:

$ GLOBALS ['is_atom'] -jsonまたはxml(atom)形式のデータをドラッグします。 trueの場合、xmlバージョンが作成されます。



$ GLOBALS ['try_consolidate'] -trueの場合、各サブスクリプションを1つの連続ファイルに書き込もうとします。

問題は、Googleは1回のリクエストで1,000を超えるレコードをプルできないため、スクリプトは$ GLOBALS ['fetch_count']レコードの断片をドラッグします(1000はこのパラメーターの有効な最大値です)。ファイルは「数千」であり、その構造(jsonおよびxml)に違反することなく、常に同じファイルに追加しようとします。 なぜなら スクリプトの実行中に実際に受信データを解析することは採算が取れず、単純なレギュラーでファイルをマージするためのかなり不器用なメカニズムを持っていますが、それでも動作します。 一般に、パラメーターを操作して、出力で何が起こるかを確認できます。



$ GLOBALS ['fetch_special_feeds'] = true; 「メモ」、「マークされたエントリ」などの特別なフィードを引き出すかどうか たぶん誰かは必要ありません。



$ GLOBALS ['fetch_regular_feeds'] = true; リストのメインフィードを個別にプルするかどうか。 たとえば、何らかの理由でメインテープだけが必要な場合、すべてが混ざっている場合(パラメーター$ GLOBALS ['need_readinglist'] )を切り落とすことができます。



$ GLOBALS ['atom_ext'] = "atom.xml.txt";

$ GLOBALS ['json_ext'] = "json.txt";

これらは、スクリプトがダウンロードするすべてのものに割り当てるファイル拡張子設定であり、パラメーター$ GLOBALS ['is_atom']がどちらかを選択することに依存します。



$ GLOBALS ['save_dir'] = "./ feeds /"; ダウンロード先のディレクトリ。 デフォルトでは、このパラメーターから推測できるように、彼は隣にフィードディレクトリを作成します)



$ GLOBALS ['log_file'] -デフォルトでは、feedsサブディレクトリに、スクリプトが画面に表示するすべてのものが複製されるlog.txtファイルがあります。



$ GLOBALS ['use_json_decode'] -json_decode関数を使用するか、簡易バージョンを使用するか。 そうする場合:

$ GLOBALS ['use_json_decode'] = function_exists( 'json_decode'); PHPのバージョンでサポートされている場合、システム関数が自動的に使用されます。 理論的には機能するはずですが、実際の生活では試してみることはありません。



さて、最後の設定は$ GLOBALS ['need_readinglist'] = false;です。 多数の感嘆符とコメントで強調表示されます。 リーダーのメインテープをドラッグするかどうか。 多くの投稿がありますが、理論的には、これらはすべて、すべてのサブスクリプションからの投稿であり、日付ごとに積み重ねられていますが、実際には、たとえばサブスクリプションからの投稿の半分以上があります。 いずれにせよ、それは大きなファイルになり、長時間スイングします。なぜ必要なのかは不明です。 まあ、またはこれを言ってください:私は誰かがそれを必要とするかもしれない理由を知りません。 あなたがコメントで啓発するなら、事前に感謝します、たぶんそれを収縮させるのが理にかなっています))



おわりに



さて、これですべての人の幸運を祈ります。この趣味が誰かの役に立つことを願っています。 そして、「ネジ」の上に場所を準備します-それは私から約ギガバイトのデータを引き出します。 たとえば、メインのHabrのフィードのサブスクリプションは現在約8万件のレコードを占めており、そのうち最も古いものはHabré自体では利用できません。



PSこれらの保存データをどのようにRSSリーダーにインポートするかという質問には答えられません。 すべての読者が、原則として、外部ソースからのサブスクリプションコンテンツのインポートをサポートするとは限りません。 私自身は、この質問をしません。OSXで自分のために読者を書いているからです。誰のためにそれをなめるのか、それとも自分に任せるのかわかりません。 しかし、私はそれが理由だと思う ここで、Habréには、オンラインリーダーの著者がいます。彼らは、後でサービスからこのデータをインポートするためのサポートを実装するかもしれません。 あるいは、ストーリー全体を引き出してそれを自分で実装する方法を見るかもしれません-読者が、GReaderからのインポートをサポートしている場合、読者がほぼすべての不満を言うだけでなく、サブスクリプションごとに500-1000の最近のレコードのみを引き出し、それだけです。



All Articles