Neden böyle bir şeye ihtiyacımız olur?>
NodeJS ve Python bir çok yararlı kütüphaneye sahip öğrenmesi kolay üretmesi daha kolay
entegre etmesi ise en kolayı, bir çok servisi bir kaç saatte kodlayıp foruma entegre
edebilirsiniz. Forumun içeriğine göre belirli kullanıcı gruplarının kullanabileceği araçlar yapabilirsiniz mesela yani..
Gerekenler>
Python > Sunucu taraflı işlemleri yaptıracağız, sadece NodeJS ile de yapılabilir fakat
NodeJS ile Pythonun etkileşimini de göstermek istedim.
NodeJS > API Oluşturarak Xenforo tarafından veri alıp, veri göndermek için
Xenforo >
Python ve NodeJS'i kurduktan sonra;
cmd veya powershell'e aşşağıdaki kodu yapıştırarak google translate kütüphanesini yüklüyoruz
Detaylar: googletrans
bir klasör oluşturup içinde
index.py isimli bir dosya oluşturuyoruz
dosya içerisinde komut satırını çalıştırıyoruz
shifte basılı tutup klasörün içine sağ tıklayarak hızlıca açabilirsiniz
sırayla komutları giriyoruz
Detaylar: python-shell , express
Şimdi kodlama vakti.
Pythondaki veriyi NodeJS projemize, NodeJS projemizdeki verileri ise hem Xenforoya hem de Pythona aktarmamız gerekiyor
API oluşturmak için gereken kütüphane Express, Python etkileşimi için de Python-Shell'i kurduk.
Py dosyamızdaki verileri NodeJS'ye aktarmak için py içerisinde print() fonksiyonunu kullanacağız
nodeJS'den pythona argüman aktarmak içinse sys.argv kullanacağız ve iletişimi
sağlayacağız. Durum bu.
Xenforoyu işin içine katmadan küçük bir test yapalım;
index.py kodları;
api.js dosyası oluşturarak içerisine kodları giriyoruz;
Kaydettikten sonra komut satırına node api yazarak çalıştıralım. ve localhost:8000
adresine gidelim.
textwilltranslate değişkenimize atadığımız 'Çevir bakalım aslan' ı çevirdi, demek ki doğru yoldayız.
şimdi textwilltranslate verisini xenforodan çekip, translate edilmiş veriyi geri göndermemiz gerekiyor.
app.get kısmını şu şekilde değiştiriyorum textwilltranslate değişkenini kodumuzun içerisinden çıkarıyorum;
artık 'localhost:8000/bunu çevir bakalım aslan' yazdığımda bana translate edilmiş veriyi verecektir
şimdi xenforoya geçelim.
ufak bir gösterim için custom thread fields kısmını kullanacağım
General Options > Value Display HTML;
son dokunuşlar.. NodeJS'ye cors ekleyeceğiz.
komut satırı: npm install cors
ve api.js'mizin son hali
komut satırı: node api.js
yazarak tekrar başlatıyoruz, artık custom fielde girdiğimiz her şey ingilizce diline çevrilecek.
NodeJS ve Python bir çok yararlı kütüphaneye sahip öğrenmesi kolay üretmesi daha kolay
entegre etmesi ise en kolayı, bir çok servisi bir kaç saatte kodlayıp foruma entegre
edebilirsiniz. Forumun içeriğine göre belirli kullanıcı gruplarının kullanabileceği araçlar yapabilirsiniz mesela yani..
Gerekenler>
Python > Sunucu taraflı işlemleri yaptıracağız, sadece NodeJS ile de yapılabilir fakat
NodeJS ile Pythonun etkileşimini de göstermek istedim.
NodeJS > API Oluşturarak Xenforo tarafından veri alıp, veri göndermek için
Xenforo >
Python ve NodeJS'i kurduktan sonra;
cmd veya powershell'e aşşağıdaki kodu yapıştırarak google translate kütüphanesini yüklüyoruz
Kod:
pip install googletrans==4.0.0rc1
bir klasör oluşturup içinde
index.py isimli bir dosya oluşturuyoruz
dosya içerisinde komut satırını çalıştırıyoruz
shifte basılı tutup klasörün içine sağ tıklayarak hızlıca açabilirsiniz
sırayla komutları giriyoruz
Kod:
npm init -y
npm install express python-shell
Şimdi kodlama vakti.
Pythondaki veriyi NodeJS projemize, NodeJS projemizdeki verileri ise hem Xenforoya hem de Pythona aktarmamız gerekiyor
API oluşturmak için gereken kütüphane Express, Python etkileşimi için de Python-Shell'i kurduk.
Py dosyamızdaki verileri NodeJS'ye aktarmak için py içerisinde print() fonksiyonunu kullanacağız
nodeJS'den pythona argüman aktarmak içinse sys.argv kullanacağız ve iletişimi
sağlayacağız. Durum bu.
Xenforoyu işin içine katmadan küçük bir test yapalım;
index.py kodları;
Kod:
from googletrans import Translator
import sys
translator = Translator()
x = translator.translate(sys.argv[1])
print(x.text)
api.js dosyası oluşturarak içerisine kodları giriyoruz;
Kod:
var express = require('express');
var app = express();
var {PythonShell} = require('python-shell');
var textwilltranslate = 'bunu çevir bakalım aslan';
app.get("/", (req, res, next)=>{
let options = {
mode: 'text',
pythonOptions: ['-u'],
args: [textwilltranslate]
};
PythonShell.run('index.py', options, function (err, result){
if (err) throw err;
console.log('result: ', result.toString());
res.send(result.toString())
});
});
const port=8000;
app.listen(port, ()=>console.log(`Server connected to ${port}`));
Kaydettikten sonra komut satırına node api yazarak çalıştıralım. ve localhost:8000
adresine gidelim.
textwilltranslate değişkenimize atadığımız 'Çevir bakalım aslan' ı çevirdi, demek ki doğru yoldayız.
şimdi textwilltranslate verisini xenforodan çekip, translate edilmiş veriyi geri göndermemiz gerekiyor.
app.get kısmını şu şekilde değiştiriyorum textwilltranslate değişkenini kodumuzun içerisinden çıkarıyorum;
Kod:
app.get(`/:textwill`, (req, res, next)=>{
let options = {
mode: 'text',
pythonOptions: ['-u'],
args: [req.params.textwill]
};
artık 'localhost:8000/bunu çevir bakalım aslan' yazdığımda bana translate edilmiş veriyi verecektir
şimdi xenforoya geçelim.
ufak bir gösterim için custom thread fields kısmını kullanacağım
General Options > Value Display HTML;
Kod:
<div id="turkce">
{$value}
</div>
<div id='ingilicce'>
</div>
<script>
fetch(`http://localhost:8000/{$value}`)
.then(function(response) {
return response.json();
}).then(function(data) {
document.getElementById('ingilicce').innerHTML=data[0]
});
</script>
son dokunuşlar.. NodeJS'ye cors ekleyeceğiz.
komut satırı: npm install cors
ve api.js'mizin son hali
Kod:
var express = require('express');
var app = express();
var {PythonShell} = require('python-shell');
var cors = require('cors')
var translatedtext;
app.get(`/:textwill`, cors(), (req, res, next)=>{
let options = {
mode: 'text',
pythonOptions: ['-u'],
args: [req.params.textwill]
};
PythonShell.run('index.py', options, function (err, result){
if (err) throw err;
console.log('result: ', result.toString());
translatedtext = result;
res.send(translatedtext)
});
});
const port=8000;
app.listen(port, ()=>console.log(`Server connected to ${port}`));
komut satırı: node api.js
yazarak tekrar başlatıyoruz, artık custom fielde girdiğimiz her şey ingilizce diline çevrilecek.