Хотите знать, как превратить свои закладки Firefox в блог WordPress?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/3817

Вопрос

Мне это тоже было интересно. Я пытался и провел несколько часов, пытаясь, но наконец -то смог продолжить. Я обнаружил несколько вещей, которые не будут очевидны для большинства людей на этом пути, поэтому я публикую здесь несколько шагов. Вы должны быть в состоянии настроить на тестовый сервер для самостоятельного тестирования. Если кто -то нашел альтернативный способ сделать это, пожалуйста, дайте мне знать.

Во -первых, я хотел, чтобы все мои закладки были несколько организованы, и хотя для Firefox есть некоторые расширения тегов, многие из них казались слишком громоздкими. Оглядываясь назад, я мог бы сначала попробовать некоторые из них.

Я решил использовать delicious.com (ранее del.icio.us) пометить мои закладки для меня. Казалось, самый простой способ сделать это, и большинство из 1500 закладок, которые я имел, были известны на этом сайте, поэтому были доступны теги. Вы сможете использовать Firefox Delicious Extension или импортировать непосредственно на их веб -сайт.

У них есть 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 и отбросьте там файл Delicious.php там Анкет (Это работает с любым сценарием импортера, который использует функцию Register_Import ().)

Теперь, когда вы заходите на панель панели и посмотрите под инструменты> Импорт, вы увидите, что вкусно является вариантом. Вы можете импортировать теги закладки в качестве категорий или тегов, и это сделает пост для каждой закладки.

Если кто -нибудь попытается это сделать, я бы хотел советы о том, что делать дальше. Я перестал это сделать, чтобы я мог справиться со своими закладками и прокомментировать те, которые были наиболее полезны. Я могу сделать это, но если кто -то знает о каких -либо плагинах, которые бы захватили выдержки, чтобы уточить вещи, пожалуйста, дайте мне знать. Довольно здорово иметь архив ваших закладок, которые могут быть легко отсортированы по времени.

Это было полезно?

Решение

Чтобы быть по теме по вопросу (Firefox), я не думаю, что подход к восхитительству в качестве промежуточного шага является предпочтительным, потому что:

  1. Вы теряете иерархическую таксономию, применяемую в Firefox (они структурировали вещи)
  2. Вы теряете изыскание, собравшиеся в Firefox
  3. Вы теряете информацию, добавленную разделителями между ссылками
  4. Вы теряете информацию о порядке каталогов и URL -адресов, применяемых в Firefox
  5. Он не совместим с другими источниками закладок, например, другие браузеры и, например, каталог URL

Поэтому мой подход к а) экспортировать Firefox в структуру каталога "закладки" с каждой закладкой, сохраненной как 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, Delsicious, Stumbleupon и т. Д. ... Не все дают информацию на уровне URL EG Alexa дает информацию на более высоком уровне в структуре домена, например, abc.def.com: вам нужен def.com Для рейтинга или abc.def.com/whatever/rtc.php: для этого вам нужен def.com/user (например, YouTube). Таким образом, вам нужна как структура домена, так и относительная структура URL, и каждый узел каждого возможного URL (как домена, так и относительного) в качестве записи в базе данных, чтобы позже представлять это и обогатить это, и вам нужны отношения между каждым Часть URL, чтобы иметь возможность представлять его.

  1. Я написал класс, который загружается в официальной структуре TLD и использовал его в качестве корневых элементов в моей базе данных. Итак .uk Получает идентификатор 1 и .co.uk Получите родительский идентификатор 1. Я использовал как список Mozilla, так и другие: Источник - список общественных суффикс Mozilla: http://publicsuffix.org/ Но это немного устарело, поэтому вам нужно добавить к этому

  2. Теперь, когда у меня есть официальные TLD, у меня есть класс, который загружается на сайтах Alexa Top 1.000.000. Это будет ссылаться так же. Многие из них являются своего рода неофициальным TLD высшего уровня. Поскольку например, «Google.com» не так официально, как TLD какой -то страны, но это кажется более важным. Делая это, вы обнаружите некоторые шаблоны, а также некоторые исключения, например, вы найдете IP -адреса, которые являются популярными. Каждая из этих записей заполняет поле «Рейтинг Alexa». (Для производительности я сначала загружаю .CSV в таблицу справки) Алекса заставит вас просмотреть шаблоны, так что это хорошо (хороший набор тестирования)

  3. Я написал класс, который пересекает мои базы данных Firefox (SQL Lite) и экспортирует все URL -адреса как .URL в структуре иерархического каталога. Это также экспортирует изысканность, будь то .ico, .png, .gif и т. Д. (См. Ниже). Это также читается в базе данных. Поскольку я обновляю это много, это связано с базой данных, описанной в 1 и 2. (в начале я также экспортировал разделители, но перестал это делать).

  4. Я начал просто перетаскивать закладки в этой структуре каталогов из других браузеров, например, от Chrome Я просто перетаскивает закладку из браузера в каталог, который также обеспечивает этот файл .URL. Структура каталога URL -адреса, которые я дал дополнительные свойства, например (h) в начале имени приведет к «сердцу», например, один URL I, как и № 01 #, поместит его на вершину (или, по крайней мере, так Код далее по обращению). Я поместил эту структуру каталога в Dropbox. Я все еще должен написать код на сервере, чтобы быть в постоянной синхронизации, поэтому часть сервера Dropbox. (Мой WordPress на сервере постоянно считывает структуру каталога URL для синхронизации и обновления закладок, как указано выше, но теперь я использую синхронизацию FTP)

  5. Я написал занятия для Delicious (вам нужен MD5) и StumbleUpon, чтобы получить не только рейтинг (Delicious = количество закладок) (SU = количество обзоров и количества просмотров страниц), но и теги и описание, которое люди используют (почему должно Я изобретаю свои собственные теги, если люди уже дали им). Поскольку у вас есть предельная сумма вызовов, вы можете сделать с этими системами, вам необходимо распространять его со временем для обогащения вашей базы данных. (Если вы теперь перейдите в Delicious и посмотрите на ссылку, посмотрите на правую сторону и получите представление о таксономии тегов, предоставленных ссылкам)

  6. Я использую Google Favicons Provider (const Google_ICON_URL = 'http://www.google.com/s2/favicons?domain=';), чтобы показать Favicons, но, поскольку у Google нет всех икон (например, не для приложений Facebook) Я обогащаю кэш с помощью значков, которые я экспортировал из Firefox. Для этого вам нужна сборка приоритетной системы, в которой выбирает правильный измерение над другим.

  7. Чтобы кэшировать это, у меня есть кэширующая структура, которая выглядит как домен, обратный для. Части EG .com.facebook.apps.geochallenge и на более глубоком уровне относительная структура пути. В каталоге EACH в этой структуре кеша я храню кэш -фавиконы. В предыдущем выпуске я также храню там результаты вызовов для Delicious и Stumblupon.

Кажется, что это WordPress Of-Scope, но на самом деле (улыбка) это очень в сфере. Функциональность встроенной ссылки не имеет хороших мета-опций / нет мета-таблицы, и у нее есть несколько более ограничений, таких как отсутствие иерархических категорий и т. Д. Также вам нужно ввести информацию в самих ее информации, в то время как есть много услуг, которые уже классифицируют URL (например, DMOZ) и дайте ему теги и т. Д., Которые стали своего рода дефолтом.

Так что это лежит «под» моим сайтом WordPress для обработки моих ссылок.

Я делаю эту настройку со всей информацией, по крайней мере, лучшими 1.000.000 плюс сайты, чтобы сделать количество вызовов меньше, а позже поделиться этим в качестве плагина. У меня есть плагин StumbleUpon в плагине WP DB, и это привело к этому. Это может дать вам информацию о внешних ссылках, которые у вас есть в вашем блоге. Есть много плагинов, которые дают вам информацию о SEO General, но ни один из них не показывает вам отчеты и сравнения, например, процент ваших исходящих ссылок, в какой категории или популярной или нет и т. Д.. Это также дает рейтинг для ваших входящих ссылок и исходящих ссылок и т. Д. и т. Д. и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top