質問

これも気になっていました。かなりの時間を費やして試してみましたが、ようやく先に進むことができました。その過程で、ほとんどの人には明らかではないいくつかのことを発見したので、ここにいくつかの手順を投稿します。これをテスト サーバー上にセットアップして、自分でテストすることもすぐにできるはずです。誰かがそれを行う別の方法を見つけた場合は、私に知らせてください。

まず、すべてのブックマークをある程度整理したいと考えていました。Firefox 用のタグ付け拡張機能はいくつかありますが、その多くは大きすぎるように思えました。振り返ってみると、最初にそれらのいくつかを試してみることもできました。

使うことにしました delicious.com (以前は del.icio.us) ブックマークにタグを付けます。これが最も簡単な方法のように思えました。私が持っていた 1,500 件のブックマークのほとんどはそのサイトに知られていたため、タグが利用可能でした。Firefox のおいしい拡張機能を使用したり、Web サイトに直接インポートしたりすることができます。

API があり、その中にこの URL が隠されています。 http:// username:password@api.del.icio.us/v1/posts/all

これにより、ブックマークがタグ付きで XML ファイルとして作成されるはずです。

次に、ここからスクリプトを使用します http://memografia.com/wordpress/delicious-to-wordpress-importer/ ブログとしてインポートします。ただし、このスクリプトをプラグイン ディレクトリに配置して機能させることはできません。WordPress 3.0 ではインポーターの方法が変更されましたが、一部のレガシーサポートは残されました (これについては実際にはどこにも文書化されていませんが)。単に wp-admin フォルダーに「input」という名前のフォルダーを作成し、そこにおいしい.php ファイルをドロップします。 。(これは、 register_importer() 関数を使用するすべてのインポーター スクリプトで機能します。)

ダッシュボードに移動して [ツール] > [インポート] を確認すると、[デリシャス] がオプションであることがわかります。ブックマークのタグをカテゴリまたはタグとしてインポートすると、ブックマークごとに投稿が作成されます。

誰かがこれを試したら、次に何をすべきかについてアドバイスをいただければ幸いです。私は、ブックマークを管理して、最も役立つブックマークにコメントできるように、その方法を調べました。それは可能ですが、抜粋を取得して具体化するプラグインを知っている人がいたら、教えてください。時間順に簡単に並べ替えることができるブックマークのアーカイブがあると、かなり便利です。

役に立ちましたか?

解決

質問(Firefox)のトピックについて言えば、次の理由から、中間ステップとしてデリシャスを使用するアプローチは推奨されないと思います。

  1. Firefox で適用されている階層分類法 (物事を構造化した方法) が失われます。
  2. Firefox に集められたファビコンが失われます
  3. リンク間の仕切りによって追加された情報が失われます
  4. Firefoxで適用されたディレクトリとURLの順序に関する情報が失われます
  5. ブックマークの他のソースとは互換性がありません。他のブラウザや例:URLのディレクトリ

したがって、私のアプローチは、a) 各ブックマークを URL として保存した「BOOKMARK」ディレクトリ構造に Firefox をエクスポートすることです。b) このブックマーク ディレクトリは実際の中心であり、他のブラウザから入力でき、階層情報を保持し、.url ファイル内に追加のメタ情報を配置できます。

(この段階で、現在のコードにディバイダーのエクスポートを削除しました)

WordPress からディレクトリ構造をたどって、WP に配置できます。現在 WordPress にあるリンクでは、適用されているディレクトリ分類も失われることに気づくでしょう (例:階層カテゴリはありません)、適切なメタテーブルがないため、この情報を保持するためにリンクストレージ用のサイドテーブルを作成することにしました(その後の手順については他の回答を参照してください)。

最初に Firefox のエクスポートに重点を置きたい場合は、次のものが必要になる可能性があります。もう一度:物理ディレクトリを走査してから、これを読み取ります。データベース テーブル (wplinks) はすぐに使用できます。

require_once("class-EdlSqliteDb.php");
require_once("class-EdlUtil.php");

class EdlFirefox {

const BOOKMARKTYPE_URL = 1;
const BOOKMARKTYPE_DIRECTORY = 2;
const BOOKMARKTYPE_DIVIDER = 3;
const FMODE = 0777;
const DIVIDER = '--------------';

var $use_cache = true;
var $dbh;

public function __construct($DbLocation, $ffRoot, $exportLocationBookmarks) 
{
    $this->mDbLocation = $DbLocation;
    $this->mRootTitle = $ffRoot;
    $this->mExportLocation = $exportLocationBookmarks;

    // database settings
    $this->dbh = new EdlSqliteDb($DbLocation);
    $this->dbh->addQ(1,"SELECT id FROM moz_bookmarks WHERE title=?");
    $this->dbh->addQ(2,"SELECT id, title, type, fk FROM moz_bookmarks WHERE parent=? ORDER BY position");
    $this->dbh->addQ(3,"SELECT content FROM moz_items_annos WHERE item_id=?");
    $this->dbh->addQ(4,"SELECT url,favicon_id FROM moz_places WHERE id=?");
    $this->dbh->addQ(5,"SELECT data, mime_type FROM moz_favicons WHERE id=?");

    // parse the content
    $this->ParseTree();     
}

/*
 * check the ff database for the the root folder folders
 *
 */
function ParseTree()
{           
    $row = $this->dbh->DbExecutePrepared(1, Array($this->mRootTitle), 'row');
    if (USE_FIREFOX_FOLDER)
    {
        $this->ParsePagesPerTree($row[0], $this->mExportLocation . '/'. FIREFOX_FOLDER .  '/');
    }
    else 
    {
        $this->ParsePagesPerTree($row[0], $this->mExportLocation . '/');
    }
    return;
}

/*
 * if a bookmark is a url then write it as a file
 *
 */
function processFFUrl($moz_bookmarks_id, $moz_bookmarks_fk, $moz_bookmarks_title, $strRootFolder)
{
    // (1.1) Get from the annotations the description of the url
    $moz_items_annos_row = $this->dbh->DbExecutePrepared(3, Array($moz_bookmarks_id), 'row');
    $moz_items_annos_description = $moz_items_annos_row[0];

    // (1.2) get the url and favicon_id from moz_places
    if ($moz_places_recordset = $this->dbh->DbExecutePrepared(4, Array($moz_bookmarks_fk), 'recordset'))
    {
        foreach ($moz_places_recordset as $moz_places_row) 
        {
            $moz_places_url        = $moz_places_row[0];
            $moz_places_favicon_id = $moz_places_row[1];
        }
    }   

    $this->getFaviconIcon($moz_places_favicon_id, $moz_places_url);

    // (1.3) create the file
    $link_url_string = "[InternetShortcut]\n";
    $link_url_string .= 'URL=' . $moz_places_url . "\n";
    $link_url_string .= 'description=' . $moz_items_annos_description . "\n";   

    if (!is_file($strRootFolder . '/'. $moz_bookmarks_title . '.url')) 
    {
        $filename = $strRootFolder . '/'. $moz_bookmarks_title . '.url';
        $fp = fopen($filename, 'w');
        fwrite($fp, $link_url_string);
        fclose($fp);
    }
}

/*
 * for each logical folder create a physical folder
 *
 */
function parsePagesPerTree($intRootId, $strRootFolder)
{
    if ($moz_bookmarks_recordset = $this->dbh->DbExecutePrepared(2, Array($intRootId), 'recordset'))
    {
        foreach ($moz_bookmarks_recordset as $moz_bookmarks_row)
        {
            $moz_bookmarks_id       = $moz_bookmarks_row[0];
            $moz_bookmarks_title    = EdlUtil::filename_safe($moz_bookmarks_row[1]);
            $moz_bookmarks_type     = $moz_bookmarks_row[2];
            $moz_bookmarks_fk       = $moz_bookmarks_row[3];
            $moz_bookmarks_url = '';
            $moz_bookmarks_favicon_id = '';

            // A bookmark can be one of three things: process (1) urls, (2) directories and (3) dividers
            if ($moz_bookmarks_type==self::BOOKMARKTYPE_URL)
            {
                $this->processFFUrl($moz_bookmarks_id, $moz_bookmarks_fk, $moz_bookmarks_title, $strRootFolder);
            } 
            elseif ($moz_bookmarks_type==self::BOOKMARKTYPE_DIRECTORY)
            {       
                $dir = $strRootFolder . '/'. $moz_bookmarks_title . '/';
                if (!file_exists($dir)) 
                {
                    if (!mkdir($dir, 0777, true)) 
                    {
                        die('Failed to create folders...');
                    }                   
                }
                $this->parsePagesPerTree($moz_bookmarks_id, $strRootFolder . '/'. $moz_bookmarks_title);
            }
            elseif ($moz_bookmarks_type==self::BOOKMARKTYPE_DIVIDER)
            {
                // todo         
            }       
        }
    }   
    return;
}   

//
function getFaviconIcon($moz_bookmarks_favicon_id, $moz_bookmarks_url)
{
    $icon_data = '';
    $moz_bookmarks_favicon = '';
    if ($moz_bookmarks_favicon_id)
    {
        if ($moz_favicons_recordset = $this->dbh->DbExecutePrepared(5, Array($moz_bookmarks_favicon_id), 'recordset'))
        {
            foreach ($moz_favicons_recordset as $moz_favicons_row)
            {
                $icon_data      = $moz_favicons_row[0];
                $icon_mime_type = $moz_favicons_row[1];
                // the following array is also defined in the google icon checker!
                $icon_type = array(  'image/png'    => 'a.png',
                                 'image/gif'    => 'a.gif',
                                 'image/x-icon' => 'a.ico',
                                 'image/jpeg'   => 'a.jpg',
                                 'image/bmp'    => 'a.bmp');                                     

                $moz_bookmarks_favicon = $icon_type[$icon_mime_type];
                // TODO reimplement echo 'warning: you should add:' . $icon_mime_type;              

                //if ('http://apps.facebook.com/frontierville/' == $moz_bookmarks_url)
                //{
                //  echo $moz_bookmarks_favicon_id . " - " . $icon_mime_type . " - " .
                //      $moz_bookmarks_favicon;
                //}
            }   
        }   
    }
    // if $moz_bookmarks_favicon = empty then provide weird name
    if ($moz_bookmarks_favicon) {
        $populair_cache = new EdlCache($moz_bookmarks_url, $moz_bookmarks_favicon);
        $obj = $populair_cache->CheckCacheData($icon_data, FILECACHE_FIREFOX, false);
    }

    // we dont want to return the data it only needs to be update
    return;         
}
 } 

これをさらに一歩進めるためのヒントを提供できれば幸いです。

1) 私が望んでいたのは、ブックマークを管理し、既存の情報でブックマークを充実させる、より簡単な方法です。2) Alexa、Delcious、StumbleUpon などのさまざまなシステムすべてが URL レベルで情報を提供するわけではありません。Alexa は、ドメイン構造のより高いレベルで情報を提供します。abc.def.com :ランキングには def.com 、または abc.def.com/whatever/rtc.php が必要です。このために、たとえば、def.com/user (youtube など) が必要です。したがって、ドメイン構造と相対 URL 構造の両方が必要であり、後でこれを表現して強化できるように、考えられるすべての URL (ドメインと相対の両方) の単一ノードをデータベースのエントリとして持ち、それぞれの間の関係が必要です。 URL の一部を使用して表現できるようにします。

  1. 公式の TLD 構造にロードするクラスを作成し、これをデータベースのルート項目として使用しました。したがって、.uk は ID 1 を取得し、.co.uk は親 ID 1 を取得します。私は Mozilla リストとその他の両方を使用しました。ソースは Mozilla パブリック サフィックス リストです。 http://publicsuffix.org/ しかし、それは少し古いので追加する必要があります

  2. 公式 TLD を追加したので、Alexa のトップ 1,000,000 サイトに読み込むクラスができました。こちらも同様にリンクしていきます。これらの多くは、一種の非公式のトップレベル TLD です。たとえば「google.com」は、どこかの国の TLD ほど公式ではありませんが、より重要なようです。そうすることで、いくつかのパターンだけでなく、いくつかの例外も見つけることができます。人気のある IP アドレスが見つかります。これらの各エントリは「Alexa ランキング」フィールドに入力されます。(パフォーマンスのために、最初に.CSVをヘルプテーブルにロードします)Alexaは、それが良いことです(良いテストセット)、パターンのレビューを強制します

  3. Firefox データベース (SQL lite) を走査し、そこにあるすべての URL を階層ディレクトリ構造の .URL としてエクスポートするクラスを作成しました。また、.ico、.png、.gif などのファビコンもエクスポートします。(以下を参照してください)。これもデータベースに読み込まれます。これは頻繁に更新するため、1 と 2 で説明したデータベースと同期します。(最初はディバイダーもエクスポートしていましたが、やめました)。

  4. 他のブラウザからこのディレクトリ構造にブックマークをドラッグアンドドロップするようになりました。クロムからは、ブラウザからブックマークをディレクトリにドラッグするだけで、その .url ファイルも配信されます。URL のディレクトリ構造には追加のプロパティを与えました。(h) 名前の先頭は「ハート」につながります。私が特に気に入っている 1 つの URL と、#01# はそれを先頭に配置します (または、少なくともそれ以降のコードがそれを処理する方法です)。このディレクトリ構造をドロップボックスに配置しました。Dropbox サーバー部分は常に同期するようにサーバー上にコードを記述する必要があります。(サーバー側の WORDPRESS は、上記のようにブックマークの同期と更新のために URL ディレクトリ構造を常に読み取りますが、現在は FTP 同期を使用しています)

  5. 私は、ランキング(デリシャス=ブックマークの量)(SU=レビューの量とページビューの量)だけでなく、人々が使用するタグと説明(なぜすでにタグが付けられている場合は、自分でタグを作成します)。これらのシステムに対して実行できる呼び出しの量には制限があるため、時間をかけて分散してデータベースを強化する必要があります。(delicious にアクセスしてリンクを検索すると、右側が表示され、リンクに与えられたタグの分類についてのアイデアが得られます)

  6. 私は Google ファビコン プロバイダー (const GOOGLE_ICON_URL = 'http://www.google.com/s2/favicons?domain=';) を使用してファビコンを表示しますが、Google にはすべてのアイコンがあるわけではありません (例:Facebook アプリケーション用ではありません) Firefox からエクスポートしたアイコンでキャッシュを充実させます。そのためには、他のファビコンよりも正しいファビコンを選択する優先システム ビルドが必要です。

  7. これをキャッシュするために、 のドメインを逆にしたようなキャッシュ構造を用意しました。部品など.com.facebook.apps.geochallenge と、より深いレベルでの相対パス構造。そのキャッシュ構造内の各ディレクトリに、キャッシュ ファビコンを保存します。以前のリリースでは、delish と stumblupon の呼び出しの結果もそこに保存しました。

これは WordPress の範囲外であるように見えますが、実際には (ニヤリ) 非常に範囲内です。組み込みのリンク機能には適切なメタ オプションやメタ テーブルがなく、階層カテゴリがないなど、さらにいくつかの制限があります。また、すでに URL を分類しているサービスがたくさんありますが、それ自体に情報を入力する必要があります (例:dmoz) にタグを付けます...それは一種のデフォルトになっています。

したがって、これはリンクを処理するために私の WordPress サイトの「下」にあります。

呼び出しの量を減らし、後でこれをプラグインとして共有するために、少なくとも上位 1,000,000 サイト以上のすべての情報を使用してこのセットアップを作成しています。wpプラグインデータベースにstumbleuponプラグインがあり、それがこれにつながりました。ウェブログ内にある外部リンクに関する情報を提供できます。SEO全般に関する情報を提供するプラグインはたくさんありますが、レポートや比較を表示するプラグインはありません。「発信リンクの何パーセントがどのカテゴリに属しているか、人気があるかどうかなど...」。また、受信リンクや送信リンクなどにランキングも付けられます。等

ライセンス: CC-BY-SA帰属
所属していません wordpress.stackexchange
scroll top