そこで、Instaloader Python ライブラリによって収集された画像を収集し、Web サイト上のギャラリーに配置できるコードを作成しています。これらを問題なく収集して表示することができましたが、各投稿のヘッダーを実装し始めたところ、問題が発生しました。
ライブラリが写真をダウンロードする方法は、コレクション内に複数の写真がある場合、コレクション内の画像の位置に基づいて投稿に _1、_2 などのサフィックスを追加し、.txt を提供することです。ファイルをタイトルとして使用します。
コレクション用のサンプル フォルダーの内容:
リーリー単一投稿の投稿はうまく機能します 例: ### リーリー
メインコードブロック:リーリー
$arrayKey は、通常の単一投稿にコレクションが存在する場合に false を返します。これは、スクリプトが (date).txt を読み取る前に (date)_(collectionposition).jpg を読み取ると仮定しているため、スクリプトがこれらのファイルを読み取るファイル順序に関係していると思います。
配列エントリがすでに作成されている場合は、通常、ヘッダーが配列データに追加されます。そうでない場合 (_1、_2 などが存在する場合など)、配列は何も更新されず、エラーも発生しません。
###編集: さらにトラブルシューティングを行うと、「日付」値に基づいて配列キーを更新/チェックする方法が間違っていることがわかります。これらの操作を処理する正しい方法が見つかることを願っていますこれを期待どおりに機能させるために修正できる点についてアドバイスをいただければ幸いです。ありがとうございます。
まずコードを勉強しましょう。 あなたが指摘した問題は次のとおりです。次の行:
リーリー....txt
if/elseファイルの処理中に日付を含む
$arrayエントリが作成されていないため、
falseを返します。 (
array_pushを使用して配列メンバーを作成するロジックはコードの下にあります。)
ロジックの関連部分に移動し続けるための簡単な修正
$arrayKeyまだ定義されていません
: リーリー つまり、が
さらに、画像の処理中に問題が発生し、初めて発生したときに警告が生成されます:
リーリーfalse
でない場合は、既存の配列メンバーへの値の追加を続けます。それ以外の場合は、配列メンバーを作成します。キーがまだ存在しないため、これは 未定義の配列キー 'collection-size' で失敗します。たとえば、配列キーを操作する前に null 合体演算子を使用して「デフォルトのゼロ」を設定するなどの修正:
$dateリーリー
これらのコメントはバグを修正しますが、txt/jpg 固有のロジックを実行する前に、txt または jpg の最初のインスタンスで、予期されるキーを持つ空の配列メンバーを使用して「エントリの作成」を分離した方がよいでしょう。自体をグループ化として使用するだけなので、
コードは、ファイルが読み取られる順序に依存しないでください。array_search
も削除できます。たとえば、日付を抽出した後、次を使用します:リーリー
次に、コードの残りの部分を変更して一致させます。順序は保証されません。それ以外の場合は、いつでも最初にファイルのリストを通常の配列に読み取り、次にそれらを並べ替えて、特定のロジックを適用するときに再度繰り返すことができます。 簡略化されたコード
実際に必要なコードの量は、実際に必要なコードの量よりもはるかに少なくなります。ここでトリミングしてみました。ファイルがないので、ここにダミー データをいくつか示します:
リーリーファイルを配列 (= ファイル パスのリスト) に入れることもできます。
リーリーリーリー
次に、次のように繰り返します:どれだけ縮むかに注目してください。どうしたの?
$date- を配列のグループ化インデックスとして使用します。
各日付のデフォルトのエントリを初期化します。それ以上の検査や条件は必要ありません。
- ファイル名に含まれる
_3- などの「コレクション サイズ」は無視されます。JPG ごとに 1 を追加するだけです。
ここでは、 readdir- と
ファイルの順序は重要ではありません。 (自由にテストして shuffle($files)- !)
###結果:### リーリー
array_search
はもう必要ありません。fopen
の代わりに、nglob
とfile_get_contents
を使用します。