Go İle WordPress Draft Postları BibTex Olarak İndirmek

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ı. 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 düzenleme linki (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 Nedir?

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ır.

Bibtex Nedir?

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şebilirsiniz. Ancak bilgisayarınızdan ya da farklı bir server üzerinden bu işlemi gerçekleştirecekseniz uzak erişim için bir kaç 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)
	}
}

Go Hakkındaki Yazılardan Haberdar Olmak İster Misin?

E-posta listesine katılarak yeni yazılardan haberdar olabilirsin.

One reply on “Go İle WordPress Draft Postları BibTex Olarak İndirmek

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir