想知道如何将您的Firefox书签变成WordPress博客?
-
16-10-2019 - |
题
我也想知道这一点。我尝试并花了很多小时的时间尝试,但是我终于能够继续前进。我发现了一些在此过程中对大多数人来说不会显而易见的事情,所以我在这里发布了一些步骤。您应该能够在测试服务器上立即进行测试。如果有人找到了另一种方法,请告诉我。
首先,我希望我所有的书签都有些井井有条,尽管Firefox有一些标签扩展名,但其中许多似乎太笨重了。回想起来,我本可以首先尝试其中一些。
我选择使用 delicious.com
(以前 del.icio.us
)为我标记我的书签。这似乎是最简单的方法,并且该网站所知道的1,500个书签中的大多数,因此可以使用标签。您将能够使用Firefox美味扩展名,或直接导入其网站。
他们有一个API,隐藏在其中是这个URL http:// username:password@api.del.icio.us/v1/posts/all
这应该使您获得书签,现在使用标签作为XML文件。
接下来,您将使用此处的脚本 http://memografia.com/wordpress/delicious-to-wordpress-importer/ 将其导入博客。但是您不能将此脚本放入插件目录中并使其正常工作! WordPress 3.0改变了他们的进口商的方式,但是他们留在了一些旧的支持中(尽管在任何地方都没有记录在任何地方。 。 (这与使用register_importer()函数的任何进口商脚本一起使用。
现在,当您进入仪表板并在工具下查看>导入时,您会看到一个美味。您可以将书签标签作为类别或标签导入,它将为每个书签发表帖子。
如果有人尝试这个问题,我会喜欢关于下一步该怎么做的建议。我提出了如何做到这一点,因此我可以处理书签,并评论最有用的书签。我可以做到这一点,但是如果有人知道任何可以摘录摘录以充实一切的插件,请告诉我。有一个可以通过时间轻松整理的书签的档案很简单。
解决方案
要在问题上进行主题(Firefox),我认为使用美味作为中间步骤的方法是首选的,因为:
- 您将失去在Firefox中应用的高级分类法(它们是您结构的方式)
- 您失去了在Firefox中聚集的Favicons
- 您丢失了链接之间的分隔线添加的信息
- 您丢失有关在Firefox中应用的目录和URL顺序的信息
- 它与其他书签不兼容,例如其他浏览器,例如URL目录
因此,我的方法是a)将Firefox导出到“书签”目录结构中,每个书签都保存为URL。 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,Deliouch,Stumbleupon等...并非全部提供有关URL级别的信息,例如Alexa提供有关域结构中较高级别的信息,例如ABC.DEF.com:您需要Def.com对于排名或abc.def.com/whate/rtc.php:为此,您EG需要def.com/user(例如youtube)。因此,您同时需要域结构和相对URL结构,并将每个可能的URL(域和相对)的每个节点作为数据库中的条目,以稍后能够表示并丰富此信息,并且您需要每个人之间的关系一部分在URL中可以代表它。
我写了一个在官方TLD结构中加载的类,并将其用作数据库中的根项目。因此,.uk获取ID 1和.co.uk获得父ID 1.我同时使用了Mozilla列表,而其他:Source是Mozilla公共后缀列表: http://publicsuffix.org/ 但这有点过时,所以您需要添加
现在,我已经有官方的TLD在那里,我的课程将在Alexa Top 1.000.000网站上加载。这将以相同的方式链接。其中许多是一种非正式的顶级TLD。因为例如“ Google.com”不像某个国家的TLD那么正式,但似乎更重要。通过这样做,您会发现一些模式,但也有一些例外,例如,您会发现Populair的IP地址。这些条目中的每一个都填充了“ Alexa排名”字段。 (对于性能,我首先将.CSV加载在帮助表中)Alexa将迫使您查看模式,以便它很好(一个很好的测试集)
我写了一个遍历我的Firefox数据库(SQL Lite)的类,并将其中的所有URL导出为层次目录结构中的.URL。无论是.ico,.png,.gif等...这也在数据库中读取。由于我对1和1中描述的数据库进行了大量更新。
我已经开始从其他浏览器中拖放此目录结构中的书签,例如Chrome,我只是将书签从浏览器拖到目录中,该目录也可以传递该.URL文件。我的目录结构我给出了额外的属性,例如,名称开头将导致“心脏”,例如,我特别喜欢一个url,#01#会将其放在顶部(或至少就是这样,进一步处理它)。我已经将此目录结构放在Dropbox中。我仍然必须在服务器上编写代码以保持恒定同步,以便Dropbox服务器部分。 (我在服务器上的WordPress不断读取以上类似于上述书签的URL目录结构,但我现在使用FTP Sync)
我为美味(您需要MD5)和Stumbleupon编写了课程,不仅获得排名(美味=书签数量)(SU =评论数量和浏览量的数量),而且标签和描述人们为什么要使用如果人们已经给出了自己的标签,我发明自己的标签)。由于您可以对这些系统进行限制的电话,因此您需要随着时间的推移将其传播以丰富数据库。 (如果您现在去美味并查找链接,请参阅右侧,并了解有关链接标签的分类法)
我使用Google Favicons提供商(const google_icon_url ='http://www.google.com/s2/favicons?domain =';)向favicons展示,但是由于Google没有所有图标(例如,不适合Facebook应用程序)我用从Firefox导出的图标丰富了缓存。为此,您需要一个优先系统构建,其中选择正确的粉丝而不是另一个。
为了缓存,我有一个缓存的结构,看起来像是逆转的域。部分Eg .com.facebook.apps.geochallenge和更深层次的相对路径结构。在eeach目录中,在该缓存结构中,我存储了缓存粉丝。在上一个版本中,我还存储了调用美味和Stumblupon的结果。
看来这是WordPress的范围外,但实际上(笑)非常卑鄙。 Build-In-In链接功能没有良好的Meta选项 /没有META表,并且它具有更多的限制,例如没有层次结构类别等...您还需要在其中本身输入信息,而有很多服务已经对URL进行分类, (例如DMOZ)并给它标记等...已成为默认值。
因此,这位于我的WordPress网站下,用于处理我的链接。
我正在使用至少最高1.000.000加上站点的所有信息进行此设置,以减少通话量,然后以插件为单位。我在WP插件DB中有一个Stumbleupon插件,这导致了此功能。它可以为您提供有关您在博客中拥有的外部链接的信息。有很多插件可以为您提供有关SEO General的信息,但没有一个显示您的报告和比较,例如,即将发出的链接中有多少类别或流行或不流行等等。它还为您的传入链接和传出链接等提供排名。