Go İle WordPress Draft Postları BibTex Olarak İndirmek

MySQL Bağlantısı ve OS İle Dosya İşlemleri

Bir süredir araştırmalar ve referanslamalar için kullandığım Zotero‘yı blog içeriklerinin üretilmesinde de kullanmaya başladım. Bunun temelinde Zotero'nun içerikleri gruplandırabilmesi, kütüphane içeriklerini ilişkilendirebilmesi, referanslamalar ve benzeri özelliklerle üretim kolaylaştırması.

AA

Ancak bu kolaylığı tembelliğe övgü olarak düşünmek yanlış olur. Sağladığı kolaylık esasında içerikleri daha da genişletmeye, tarama alanını genişletmeye de olanak sağlamakta. Eğer benim gibi siz de blog içeriklerinizi draft olarak WordPress veritabanında tutuyorsanız Zotero’yu blog üzerim sürecine dahil etmek biraz zahmetli olacaktır. Hele birden fazla blog için içerik üretiyor ve yüzlerce fikri draft olarak tutuyorsanız…

Bir süredir draft postları başlık (post_title), içerikleri (post_content) ve içerik kimliği (ID) ile nasıl Zotero’ya uygun hale getireceğimi düşünüyordum ve bu gereksinimi bir diğer süreç olan Go dili pratiği ile birleştirmeye karar verdim. Böylelikle temel düzeyde Go dili üzerinden veritabanı erişimi sağlamış, dosya işlemleri gerçekleştirmiş ve elde ettiğim içerikleri BibTex olarak kayıt ederek Zotero için uygun bir import dosyası haline getirmiş oldum. Aşağıda süreci, süreç içerisinde karşılaştığım sorunları ve kullandığım BibTex formatını görebilirsiniz.

Zotero icerik

Zotero

macOS, Linux ve Windows işletim sistemlerinde çalışan, ayrıca Firefox, Chrome, Safari gibi internet tarayıcıları bünyesinde eklenti (Zotero Connector) olarak da kullanılan, araştırma ve alıntı kaynaklarını toplamak ve yönetmek için kullanılan bir açık kaynak referans yönetimi yazılımıdır1.

Bibtex

TeX ve LaTeX biçimli belgelerde kaynak gösterilmesi için kullanılan bir yazılım aracıdır. Bibtex‘i import sürecinde tercih etmemin nedeni, Zotero tarafından işlenen formatlardan biri olmasının yanı sıra diğer formatlara nazaran çok daha pratik bir şekilde veritabanından çektiğim içerikleri sunmamı sağlaması oldu. Bu süreçte kullandığım yapı şu şekildeydi:

@misc{
  title = {},
  url = {},
  annote = {}
}

Wordpress veritabanında çektiğim verilerle derlenmiş hali ise şu şekilde:

@misc{
    title = {post_title},
    url = {http://domain.com/wp-admin/post.php?action=edit&post=ID},
    annote = {post_content}
}

Aşağıda paylaştığım go kodunu sunucunuzda kullanacaksanız localhost ile veritabanınıza erişebilirsiniz2. Ancak bilgisayarınızdan ya da farklı bir server üzerinden bu işlemi gerçekleştirecekseniz uzak erişim için birkaç düzenleme yapmanız gerekebilir.

package main

import (
"database/sql"
"os"
"strconv"
"strings"

_ "github.com/go-sql-driver/mysql"
strip "github.com/grokify/html-strip-tags-go"
)

var tag struct {
ID          int
postTitle   string
postContent string
}

var fileName = "file.bib"

func main() {

// db, err := sql.Open("mysql", "user:pass@tcp(domain.com:3306)/database")
db, err := sql.Open("mysql", "user:pass@/database")
checkError(err)

defer db.Close()

err = db.Ping()
checkError(err)

results, err := db.Query("SELECT ID, post_title, post_content FROM cea_posts WHERE post_type='post' AND post_status='draft'")
checkError(err)

if _, err := os.Stat(fileName); os.IsNotExist(err) {
_, err := os.Create(fileName)
checkError(err)
}
for results.Next() {
err = results.Scan(&tag.ID, &tag.postTitle, &tag.postContent)
checkError(err)

postContent := strip.StripTags(tag.postContent)
postContent = strings.TrimSpace(postContent)

f, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
checkError(err)
_, err = f.WriteString("@misc{\ntitle = {" + tag.postTitle + "}, url = {http://domain.com/wp-admin/post.php?action=edit&post=" + strconv.Itoa(tag.ID) + "},\nannote = {"+ postContent +"}\n}\n")

checkError(err)
}
}

func checkError(err error) {
if err != nil {
panic(err)
}
}