Anda memiliki situs Drupal di sebuah LAN (Local Area Network). Situs ini digunakan para staf untuk memperbaharui informasi yang dikonsumsi publik di LAN tersebut. Anda juga memiliki situs Drupal lainnya yang diletakkan di Internet untuk konsumsi publik yang lebih luas. Isinya harus sama dengan yang ada di server LAN. Sengaja kedua server ini dibuat dengan alasan kecepatan saat para staf memperbaharui data. Maklum keterbatasan bandwidth.
Lalu bagaimana menyamakan keduanya ?
Server LAN jelas sebagai sumber data dan server di Internet sebagai target. Untuk menyamakan keduanya Anda bisa menggunakan sebuah script di luar kedua Drupal tersebut yang berfungsi sebagai XMLRPC client. Dengan begitu kedua Drupal berfungsi sebagai XMLRPC server. Script diletakkan di server LAN yang dijalankan setiap hari, yaitu di saat para staf sudah rampung memperbaharui data namun server LAN masih hidup (tentu saja). Anda bisa tentukan pada jam 15:17 misalnya.
Sebelum membahas script tersebut, kini kita siapkan Drupal pada server LAN sebagai XMLRPC server.
name = Sumber RPC description = XMLRPC Server core = 6.x dependencies[] = services
<?php function sumber_rpc_service() { return array( array( '#method' => 'node.all_nids', '#callback' => 'sumber_rpc_all_nids', '#return' => 'array', ), ); } function sumber_rpc_all_nids() { $r = db_query("SELECT nid FROM {node} ORDER BY 1"); $nids = array(); while ($node = db_fetch_array($r)) { if ($node['nid']) { $nids[] = $node['nid']; } } return $nids; }
Drupal akan membuatkan key berbentuk md5 seperti ini (contoh):
c266f8874891993ff7b71554e9df00b6
Sampai di sini konfigurasi untuk server LAN sebagai XMLRPC server selesai. Selanjutnya masih di server LAN, kita akan membuat XMLRPC client untuk mencoba apakah XMLRPC server pada Drupal berfungsi.
config_lan = { 'url': 'http://rab.local/services/xmlrpc', 'key': 'c266f8874891993ff7b71554e9df00b6', 'username': 'admin', 'password': 'a', 'domain': 'rab.local', }
from drupal_services import DrupalServices from config import config_lan drupal_lan = DrupalServices(config_lan) print drupal_lan.call('node.all_nids')
Jalankan:
$ python drupal_sync.py
self.user.login('85f79a6f3132c3d188c19fe721a6b23d9083d1f31bf13094f08297aa7ee18e6b', 'rab.local', '1280629380', 'gUPDMWioCz', '3bdm1dl1idrhpdcs741vcd3nl6', 'admin', 'a') self.node.all_nids('442f846a396d7e282fa858430d946f62e28946cb565e31495a161c15c1f3cc84', 'rab.local', '1280629380', 'aKoTnh24e0', 'p7o0144gm1ealt1l3ma8fa6f11') ['1', '2']
['1', '2']
from drupal_services import DrupalServices from config import config_lan drupal_lan = DrupalServices(config_lan) for nid in drupal_lan.call('node.all_nids'): print drupal_lan.call('node.get', nid)
Server Internet
Kini kita beralih ke server yang ada di Internet.
Server LAN
Kembali ke server LAN untuk menambahkan isi file config.py menjadi:
config_lan = { 'url': 'http://rab.local/services/xmlrpc', 'key': 'c266f8874891993ff7b71554e9df00b6', 'username': 'admin', 'password': 'a', 'domain': 'rab.local', } config_internet = { 'url': 'http://rab.co.id/services/xmlrpc', 'key': '19fe0da0a30ab55407da3b14e2606b27', 'username': 'admin', 'password': 'a', 'domain': 'rab.co.id', }
from drupal_services import DrupalServices from config import config_lan, config_internet drupal_lan = DrupalServices(config_lan) drupal_internet = DrupalServices(config_internet) nids_internet = drupal_internet.call('node.all_nids') for nid in drupal_lan.call('node.all_nids'): if nid in nids_internet: node_lan = drupal_lan.call('node.get', nid, ['changed']) node_internet = drupal_internet.call('node.get', nid, ['changed']) if node_lan['changed'] > node_internet['changed']: node_lan = drupal_lan.call('node.get', nid) drupal_internet.call('node.save', node_lan) nids_internet.remove(nid) else: node_lan = drupal_lan.call('node.get', nid) del node_lan['nid'] drupal_internet.call('node.save', node_lan) for nid in nids_internet: drupal_internet.call('node.delete', nid)
$ python drupal_sync.py
Jika sudah benar jalankan script tersebut setiap jam 15:17 sesuai rencana awal, yaitu dengan membuat file /etc/cron.d/drupal_sync di server LAN yang berisi:
17 15 * * * root python /home/sugiana/drupal_sync/drupal_sync.py
Selamat mencoba.
Komentar
Assalamu’alaikum
Assalamu’alaikum wr.wb.
Institusi kami berdasarkan lisensi Federal Reserve bersedia bekerjasama dan memiliki kemampuan untuk melakukan High Yield Investment Program terhadap Asset Amanah Indonesia.
Bagi Pemegang atau yang mengetahui Asset tsb.saya menawarkan kerjasama untuk mengelola Asset Amanah dalam Program kami.
Program ini memberikan Keuntungan setiap minggu/bulan tanpa adanya “resiko dan kerugian” apapun baik terhadap pemilik asset maupun asset itu sendiri.
Mari wujudkan Kebenaran dan Impian Masa Depan Indonesia Melalui Asset Amanah Indonesia dalam Pengelolaan Kebenaran dan Kepastian Program Kami.
Wassalam,
Haris Hedar (harishedar@gmail.com)
Maaf, apa tidak keliru room ?
Maaf, apa tidak keliru room ? Yang ini sedang bahas Drupal.
Maaf pak mau tanya mohon
Maaf pak mau tanya mohon bantuannya, kenapa setelah saya coba, masih untuk di server LAN dan eksekusi drupal_sync.py saya masih menemui kendala seperti ini :
Traceback (most recent call last):
File "drupal_sync.py", line 7, in
drupal_lan = DrupalServices(config_lan)
File "/home/ical/python_drupal_services/drupal_services.py", line 128, in __init__
config['domain'], config['key'])
File "/home/ical/python_drupal_services/drupal_services.py", line 74, in __init__
self.session = self.call('user.login', username, password)
File "/home/ical/python_drupal_services/drupal_services.py", line 39, in call
return getattr(self, method_name)(self._build_eval_list(method_name, args))
File "/usr/lib/python2.7/xmlrpclib.py", line 1224, in __call__
return self.__send(self.__name, args)
File "/usr/lib/python2.7/xmlrpclib.py", line 1575, in __request
verbose=self.__verbose
File "/usr/lib/python2.7/xmlrpclib.py", line 1264, in request
return self.single_request(host, handler, request_body, verbose)
File "/usr/lib/python2.7/xmlrpclib.py", line 1297, in single_request
return self.parse_response(response)
File "/usr/lib/python2.7/xmlrpclib.py", line 1473, in parse_response
return u.close()
File "/usr/lib/python2.7/xmlrpclib.py", line 793, in close
raise Fault(**self._stack[0])
xmlrpclib.Fault:
Sepertinya
Sepertinya https://github.com/guaka/python_drupal_services masih untuk modul Services versi 2, sedangkan sekarang sudah versi 3. Coba gunakan http://upload.rab.co.id/node/115394.