当前位置: 首页 > news >正文

lisp如何调用linux头文件,用lisp开发博客客户端

博客客户端如何实现

像我们这种基本没接触过Web开发的人,可能完全没有思路去实现一个博客客户端。事实上

实现起来非常简单。

使用过其他博客客户端(例如Windows Live writer)的人肯定知道metaweblog API,在配

置客户端的时候需要填入。例如CPPBLOG的这个地址就是

http://www.cppblog.com/kevinlynx/services/metaweblog.aspx。这个页面展示了一些API

说明。这些API就是博客客户端和服务器进行操作通信的接口。意思是说,服务器端提供这

这些接口,我们的客户端调用这些接口即可。例如:

blogger.deletePost,调用该接口即可删除一篇博客文章

但是客户端如何调用到这个接口呢?这需要通过一种新的技术(或者说标准),即 xml rpc

。rpc大家应该清楚,xml rpc其实说白了, 就是把接口调用的细则塞进 http

请求发给web服务器,服务器接收请求完成操作后再把结果以http回应的形式丢给客户端,

即完成了一次接口调用 。

至于http请求回应的细则就不提了,无非就是一些特殊格式的数据,通过tcp连接与服务器

交互这些数据。

所以,基本上,整个过程还是非常简单。如何来将调用细节塞进http请求,则是以xml rpc

标准来做,其格式正好是xml格式。举个例子吧:

title_or_id

当然这部分数据之前就是若干http请求的数据。服务器回应也是以xml格式组织:

Welcome to Zope.org

我们的博客客户端所要做的,就是把这些博客发布相关的操作封装起来提供给使用者。底层

实现主要包括http请求、xml-rpc的组织等。何况,这两部分在各个语言里都有大量的库存

在,lisp自然也有。

我这里直接选取了lisp的一个xml-rpc库:s-xml-rpc,基本上百来行代码就可以把各个功

能跑一遍。例如以下lisp代码就实现了通过s-xml-rpc删除CPPBLOG的一篇文章:

(defun delete-post (postid)

(rpc-call

"blogger.deletePost"

postid

"kevinlynx"

"password"

t))

发布博客也很简单,根据metaweblog API接口的说明,发布博客时需要填充一个结构体。但

主要涉及到的数据仅包括:文章内容、文章标题、文章分类(可选):

(defun new-post (title context &optional (cates))

(rpc-call

"metaWeblog.newPost"

""

"kevinlynx"

"password"

(new-post-struct title context cates)

t))

值得注意的是,如果文章中有贴图,则需要事先将图片文件上传到服务器。CPPBLOG的

metaweblog API里恰有API提供:

(defun new-media-object (filename)

(rpc-call

"metaWeblog.newMediaObject"

""

"kevinlynx"

"password"

(new-media-object-struct filename)))

该函数读入图片文件,然后调用metaWeblog.newMediaObject接口,即可完成上传。上传成

功后,服务器会返回该图片的URL。然后在我们的文章中就可以使用该图片了。

相关文章:

  • linux 查看服务器任务,细说linux学习--服务器系统查看以及定时任务
  • linux隔离内核使用某些CPU,isolcpu参数 隔离cpu使其不被自动调度(linux 修改boot参数)...
  • linux路径信息,linux 底层 基础命令 路径信息
  • Linux基础信息,Linux基础(用户信息)
  • 在linux下安装mongo数据库,Linux系统下安装MongoDB
  • linux5编辑文本,linux 学习5 文本编辑器 vim
  • c语言数字类型转字符类型,C语言的基本数据类型及数据类型转换
  • 李含光c语言程序设计教程百度云,C语言程序设计教程 李含光 郑关胜 清华大学出版社习题答案...
  • 个人密码管理程序c语言,密码管理系统C语言(8页)-原创力文档
  • c语言程序设计数字电位器,可编程数字电位器在AVR单片机中的应用
  • 编程语言与c语言转换,【转】一些变态的编程语言
  • android 位于底部的tab,GitHub - DevinFu/BottomTabBar: Android应用中位于底部的tab栏
  • android studio 程序包r不存在,Android Studio问题!无法解析符号R,找不到与...
  • 麒麟810鸿蒙内核移植,2K魅眼屏+鸿蒙OS系统+麒麟810 华为出大招了
  • C51编程语言的特点 与C的异同点,编程语言异同点归纳之一:注释方法 | 求索阁...
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【剑指offer】让抽象问题具体化
  • centos安装java运行环境jdk+tomcat
  • docker容器内的网络抓包
  • emacs初体验
  • extract-text-webpack-plugin用法
  • Git 使用集
  • Intervention/image 图片处理扩展包的安装和使用
  • Javascript弹出层-初探
  • Mysql优化
  • node入门
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • 测试开发系类之接口自动化测试
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 深入 Nginx 之配置篇
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 说说动画卡顿的解决方案
  • 终端用户监控:真实用户监控还是模拟监控?
  • 选择阿里云数据库HBase版十大理由
  • ​iOS实时查看App运行日志
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (九)One-Wire总线-DS18B20
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (强烈推荐)移动端音视频从零到上手(上)
  • (一) storm的集群安装与配置
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET 的程序集加载上下文
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET 指南:抽象化实现的基类
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...