[转载]php导出excel - 樰梅 - 博客园

mikel阅读(928)

[转载]php导出excel – 樰梅 – 博客园.

这里有三种php导出excel的方法,如下:

方法一:使用制表符、换行符模拟Excel导出

$filename=”ExportExcel.xls”;//定义一个excel文件
header(“Content-Type: application/vnd.ms-execl”);
header(“Content-Type: application/vnd.ms-excel;charset=UTF-8″);
header(“Content-Disposition: attachment; filename=$filename”);
header(“Pragma: no-cache”);
header(“Expires: 0″);
//设置excel输出表头,当然这不是必须的
echo iconv(“UTF-8″, “gb2312″, “ID”).”\t”;
echo iconv(“UTF-8″, “gb2312″, “Col1″).”\t”;
echo iconv(“UTF-8″, “gb2312″, “Col2″).”\t”;
echo iconv(“UTF-8″, “gb2312″, “Col3″).”\t”;
echo iconv(“UTF-8″, “gb2312″, “Col4″).”\n”;//注意这个要换行
//连接数据库
mysql_query(“SET NAMES utf8″);
$result=”SELECT * FROM”);
while($row =mysql_fetch_array($result)){
echo iconv(“UTF-8″, “gb2312″, $row[0]).”\t”;
echo iconv(“UTF-8″, “gb2312″, $row[1]).”\t”;
echo iconv(“UTF-8″, “gb2312″, $row[2]).”\t”;
echo iconv(“UTF-8″, “gb2312″, $row[3]).”\t”;
echo iconv(“UTF-8″, “gb2312″, $row[4]).”\n”;
}

这个方法最简单,但是导出的文件并不是真正的Excel,无法设置格式,而且在Mac版的MS Office上无效。
这个方法还有一个bug,如果导出的数据中某个字段内容比较多,数据量多余30条的话,导出的数据会丢失甚至无法导出,所以用这种方法的话要慎重。

方法二:使用php-excel类导出excel

简单小巧的Excel类库,可自行修改相关代码设置单元格格式,导出的实际上市XML格式的电子表格。

// load library
require ‘php-excel.class.php’;
// create a simple 2-dimensional array
$data = array(
1 => array (‘Name’, ‘Surname’),
array(‘Schwarz’, ‘Oliver’),
array(‘Test’, ‘Peter’)
);
// generate file (constructor parameters are optional)
$xls = new Excel_XML(‘UTF-8′, false, ‘My Test Sheet’);
$xls->addArray($data);
$xls->generateXML(‘my-test’);

方法三:使用PHPExcel类导出excel

功能强大、全面,支持office2003、office2007与之相应的是过于臃肿,比较复杂。

[转载]ecshop2.73和Discuz! X3 整合教程_ecshop技术文档_ecshop进阶教程_ecshop教程_ECSHOP模板堂

mikel阅读(833)

[转载]ecshop2.73和Discuz! X3 整合教程_ecshop技术文档_ecshop进阶教程_ecshop教程_ECSHOP模板堂.

关于ecshop最新版和discuz整合教程有很多,不过最新的discuz 版本整合有点不一样,下面ecshop模板堂(www.ecmoban.com)为大家整理一下详细教程

1, 首先下载 最新版本uc_client,下载点这里

下载之后解压压缩文件,会得到两个版本,utf8和gbk,按你不同的程序编码选择不同的版本即可,比如utf8的ecshop就进utf-8文件夹。

2,把里面的uc_client文件夹,上传到ecshop根目录,如图

整合步骤1

3,进ecshop后台 会员管理-会员整合

选择 ucenter进行安装,为什么选择ucenter呢?因为discuz也是整合ucenter的,ecshop可以通过整合ucenter来进行和discuz的会员打通

 

4,下一步,输入ucenter路径和密码

ucenter的地址,如果你已经安装了discuz并且是整合ucenter的话就简单了,直接是“论坛地址/uc_server”即可

密码则是ucenter的创始人密码。

 

5,之后选择按不同的规则合并会员

6,最后在ucenter的后台应用管理看看是不是已经有ecshop 系统了

该不该重造轮子?

mikel阅读(997)

现在互联网上的技术更新太快,每天都会有那么多的框架发布,要不说程序员是幸运的也是不幸的一群人。
幸运的是每天都能接触世界最前沿的技术变化 ,开发世界早就已经百家争鸣了,现在的自媒体才流行相比有点OUT;不幸的是那么多新框架、新思想、新语言需要学习,要想跟上脚步,那就得不停的学习,但是只要有面向对象的思想基础,学习新的技术也是很容易触类旁通的,甚至自己写一个新的框架都可以。

说道自己开发框架,就是该不该重造轮子?

过去自己喜欢从头设计开发自己的框架,使用起来比较顺手,根据自己的需求可以自定义很多功能,就像自己的孩子一样,从哪一层都了如指掌,后来接触框架接触多了,感觉很多时候可以利用现有框架,在框架基础上改造,毕竟大部分都是开源的,说得有点儿复杂了,举个简单的例子,你是要从无到有自己开发一个网站,还是利用现成的cms建站系统几分钟建站呢?

视需求而定,建议是先cms建站,后期改进cms,然后重构成自己的开发。

也就是快速实现,迭代更新的过程,时机不等人,慢一天上线,就会少一分竞争力,需求又是无时不在变化的,设想的再好,也不会知道目标客户到底需要什么,不如直接上线目标客户需要什么就做成什么来得直接。

轮子那么多了,拿来用就是了,不合适了,再改造,微创新吧。

[转载]我用JAVA做了个简易图像相似度计算器 - wavky - 博客园

mikel阅读(1105)

[转载]我用JAVA做了个简易图像相似度计算器 – wavky – 博客园.

简单说两句:

笔主利用这个七夕前后两天的寂寞时光,用JAVA磨了一个简单的图像相似度计算小程序,就在刚才终于纠结完毕,输出了1.0版本,小小的满足了一下可怜的虚荣心..→_→

使用最简单最基础的感知哈希算法,算法原理戳这里,绝对比笔主讲的要好:

http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html

 

UI设计图:

 

实际运行效果图:

 

关键算法:

// 全流程
public static void main(String[] args) throws IOException {
// 获取图像
File imageFile = new File("c:/1.jpg");
Image image = ImageIO.read(imageFile);
// 转换至灰度
image = toGrayscale(image);
// 缩小成32x32的缩略图
image = scale(image);
// 获取灰度像素数组
int[] pixels = getPixels(image);
// 获取平均灰度颜色
int averageColor = getAverageOfPixelArray(pixels);
// 获取灰度像素的比较数组(即图像指纹序列)
pixels = getPixelDeviateWeightsArray(pixels, averageColor);
// 获取两个图的汉明距离(假设另一个图也已经按上面步骤得到灰度比较数组)
int hammingDistance = getHammingDistance(pixels, pixels);
// 通过汉明距离计算相似度,取值范围 [0.0, 1.0]
double similarity = calSimilarity(hammingDistance);
}

// 将任意Image类型图像转换为BufferedImage类型,方便后续操作
public static BufferedImage convertToBufferedFrom(Image srcImage) {
BufferedImage bufferedImage = new BufferedImage(srcImage.getWidth(null),
srcImage.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bufferedImage.createGraphics();
g.drawImage(srcImage, null, null);
g.dispose();
return bufferedImage;
}

// 转换至灰度图
public static BufferedImage toGrayscale(Image image) {
BufferedImage sourceBuffered = convertToBufferedFrom(image);
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(cs, null);
BufferedImage grayBuffered = op.filter(sourceBuffered, null);
return grayBuffered;
}

// 缩放至32x32像素缩略图
public static Image scale(Image image) {
image = image.getScaledInstance(32, 32, Image.SCALE_SMOOTH);
return image;
}

// 获取像素数组
public static int[] getPixels(Image image) {
int width = image.getWidth(null);
int height = image.getHeight(null);
int[] pixels = convertToBufferedFrom(image).getRGB(0, 0, width, height,
null, 0, width);
return pixels;
}

// 获取灰度图的平均像素颜色值
public static int getAverageOfPixelArray(int[] pixels) {
Color color;
long sumRed = 0;
for (int i = 0; i < pixels.length; i++) {
color = new Color(pixels[i], true);
sumRed += color.getRed();
}
int averageRed = (int) (sumRed / pixels.length);
return averageRed;
}

// 获取灰度图的像素比较数组(平均值的离差)
public static int[] getPixelDeviateWeightsArray(int[] pixels,final int averageColor) {
Color color;
int[] dest = new int[pixels.length];
for (int i = 0; i < pixels.length; i++) { color = new Color(pixels[i], true); dest[i] = color.getRed() - averageColor > 0 ? 1 : 0;
}
return dest;
}

// 获取两个缩略图的平均像素比较数组的汉明距离(距离越大差异越大)
public static int getHammingDistance(int[] a, int[] b) {
int sum = 0;
for (int i = 0; i < a.length; i++) {
sum += a[i] == b[i] ? 0 : 1;
}
return sum;
}

// 通过汉明距离计算相似度
public static double calSimilarity(int hammingDistance){
int length = 32*32;
double similarity = (length - hammingDistance) / (double) length;

// 使用指数曲线调整相似度结果
similarity = java.lang.Math.pow(similarity, 2);
return similarity;
}

UI部分的代码就不公开了,成品下载地址如下(使用JDK1.5):

http://download.csdn.net/detail/u011088871/7711833

 

解压后打开 run.bat 批处理文件就可以跑起来了 🙂

[转载]入门:构建简单的Web API - 张善友 - 博客园

mikel阅读(1050)

[转载]入门:构建简单的Web API – 张善友 – 博客园.

WCF Web API支持多个宿主环境:自宿主(windows服务或者控制台)和IIS宿主(ASP.NET webform/mvc)。这个入门文章主要演示在ASP.NET MVC3网站宿主:

  • 如何使用NuGet向项目中添加Web Api引用
  • 如何创建一个通过HTTP GET访问的Web Api
  • 如何通过asp.net routes宿主一个Web Api
  • 如何通过浏览器或者Fiddler访问Web Api
  • 如何在Api上启用OData uri查询
  • 如何用WCF Web Test Client测试WCF Web API

1、创建一个基本的解决方案:使用VS2010新建一个空的ASP.NET MVC 3 Web Application

image

设置站点的端口号为9000

image

2、向解决方案中加入Web Api的引用

通过NuGet来添加Web api的程序集引用,右击项目属性,选择“Manage NuGet Packages”

image

在NuGet管理扩展器上查询Online的”webapi.all“

 

image

选择安装,NuGet就会下载所有所需的软件包,现在可以开始开发Web Api。

3、创建一个Contacts Api类

右击项目ContactManager选择添加一个文件夹,取名”APIs“,然后在APIs文件夹上右击添加类,类名叫做ContactsApi:

using System.ServiceModel;
namespace ContactManager.APIs
{
    [ServiceContract]
    public class ContactsApi
    {
    }
}
ContractsApi 加了ServiceContractAttribute表示这是一个WCF 服务,将通过HTTP方式暴露出来。
4、通过asp.net routing注册ContractsApi
Api需要通过ASP.NET MVC宿主,使用ASP.net Route的MapServiceRoute扩展方法把它注册进去。切换到global.asax.cs文件,添加以下引用
using ContactManager.APIs;
using System.ServiceModel.Activation;
在RegisterRoutes方法里加入下述代码
routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));
下面的黄色部分很重要,MVC的默认路由是映射到controller + action
public static void RegisterRoutes(RouteCollection routes)
   {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi))); 
routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}

MapServiceRoute需要一个泛型参数指定服务(API),以及一个将被追加到IIS base url的路径。在这里,我们指定的“contacts”,也就是宿主为“http://localhost:9000/api/contacts”。

5. 通过一个HTTP Get 方法暴露contacts:首先创建一个poco(Plain Old C#)Contract类,代表我们在api上传递的联系人,本质上就是一个DTO(数据传输对象),在HTTP上我们把它作为资源,然后创建一个 HTTP Get方法暴露资源。

右击项目ContactManager项目选择添加新的文件夹“Resources”,在Resources文件下创建一个新的类Contact。

namespace ContactManager.Resources
{
    public class Contact
    {
        public int ContactId { get; set; }
        public string Name { get; set; }
    }
}

返回到ContactApi类,添加下述引用:

using System.ServiceModel.Web;
using ContactManager.Resources;

添加一个Get方法返回所有的contracts

[WebGet(UriTemplate = "")]
public IQueryable<Contact> Get()
{
    var contacts = new List<Contact>()
        {
            new Contact {ContactId = 1, Name = "Phil Haack"},
            new Contact {ContactId = 2, Name = "HongMei Ge"},
            new Contact {ContactId = 3, Name = "Glenn Block"},
            new Contact {ContactId = 4, Name = "Howard Dierking"},
            new Contact {ContactId = 5, Name = "Jeff Handley"},
            new Contact {ContactId = 6, Name = "Yavor Georgiev"}
        };
    return contacts.AsQueryable();
}

Get方法上加了WebGet Attribute表示这是一个HTTP Get。注意这里的UriTemplate被设置为“”,默认情况下,操作的Uri是方法名Get,在这种情况下,我们是在Route中设置的Uri。

6、通过浏览器查询Contracts.按F5运行项目,然后再浏览器地址栏中输入http://localhost:9000/api/contacts

image

7、查询返回Json格式的Contracts。HTTP提供了一些“内容协商”机制 — 当有多个可得的表现形式的时候,对特定的响应选择最好的表现形式的处理过程。

服务器驱动协商(Server-driven Negotiation)

如果响应的最好的表现形式的选择是通过服务器上的算法来实现,那么这种方式的协商称做服务器驱动协商。选择是基于响应可得的表现形式(根据不同的维度,响应会不同;例如,语言,内容编码,等等)和请求消息里特定的头域或关于请求的其他信息(如:网络客户端的地址)。
服务器驱动协商是有优点的,当从可行的表现形式里进行选择的算法对用户代理进行描述是比较困难的时候,或者当服务器期望发送“最好的猜测”给 客户端而只通过一个响应(以避免后续请求的回路(一个请求会返回一个响应)延迟如果此“最好的猜测“对用户适合的时候)的时候。为了改善服务器的猜测,用 户代理应该包含请求头域(Accept,Accept-Language,Accept-Encoding,等等),这些头域能描述它对响应的喜好。

Web api返回的响应很容易添加一种媒体类型(media types )。

打开Fiddler,在“Request builder”栏输入地址“http://localhost:9000/api/contacts”,然后移动到“Request Headers”在“User-Agent” 项下方添加 “Accept: application/json”

wcfjson

按下 Exectue按钮,双击左边的Panel查看HTTP的response,切换到“Raw”Tab,你可以看到下面的json格式的数据:

image

8、启用OData 查询支持

Web API支持OData协议,接受OData的URI格式查询,当OData 查询到达Web Api, 在返回客户端之前在服务端会进行必要的过滤和排序。查询使用IQueryable 接口,服务端并没有去查询所有的数据,发送过滤和排序到服务端。

return contacts.AsQueryable();

运行程序,在浏览器里输入 http://localhost:9000/api/contacts?$Top=4&$OrderBy=Name ,看到浏览器之返回了按名字排序的top 4个contract

webapiodata也可以通过Fidder去查询,具体可参照第7步。

9、WCF Web API也提供了一个WCF Web Test Client用于测试WCF Web API,通过配置启用,在RegisterRoutes方法里创建HttpConfiguration 实例,并设置EnableTestClient属性为True:

var config = new HttpConfiguration() { EnableTestClient = true };

然后把HttpConfiguration实例传递给HttpServiceHostFactory的配置属性

routes.Add(new ServiceRoute(“api/contacts”, new HttpServiceHostFactory() { Configuration = config }, typeof(ContactsApi)));

按下F5 启动调试项目,然后再浏览器后面加入/Test

image

总结

通过这个Quick start,我们学习到了以下内容

  • 如何使用NuGet向项目中添加Web Api引用
  • 如何创建一个通过HTTP GET访问的Web Api
  • 如何通过asp.net routes宿主一个Web Api
  • 如何通过浏览器或者Fiddler访问Web Api
  • 如何在Api上启用OData uri查询
  • 如何用WCF Web Test Client测试WCF Web API

你可以在这里获取到代码。

2011-10-4日更新到WebAPI 0.5 Preview

一无所有其实没什么

mikel阅读(819)

最近在研究软文,可真心的写不出来那么软的文啊!

文笔功底差,不是一天两天的事儿,憋了半天,不如安然和小猫人家几分钟写得好,惭愧,惭愧。在这先谢㴬两位的帮助,感激不尽!

每个人都不是全才,掌握的资源有限,如何利用和积累就成了一项很重要的能力。
也是穷人和富人之间最大的区别。

富人善于资源的分享和互换,挖掘资源的价值,就算他们一无所有一样可以获得更多的资源,因为他们主动去想获取资源的办法。

穷人总是把一无所有当借口,富人找摆脱一无所有的方法,这就是区别。

举个例子吧,同样是一无所有的穷人和富人分别在路上走,都看到身旁飞驰而过一辆奔驰,

穷人:等我有钱了,一定要买辆奔驰,可惜我现在什么都没有,不可能有那一天

富人:我得想办法怎么能赚一辆奔驰的钱,捡垃圾可以卖钱,先从捡垃圾开始吧

也就是为什么那么多圈子要设立支付xx元入群的门槛的原因,开始我不明白,后来明白了,穷人把钱用来消费,而舍不得用来投资,富人把钱当成资源,利用钱来获得更多资源,然后就是吸引力法则说的,富人资源越来越多,穷人资源越来越少。设置的这个xx元的门槛,其实是一个考试,看你懂不懂得利用资源?有没有富人的思维模式,结果很多人不合格,很正常,2/8原则。

一无所有不可怕,可怕的是穷人思维模式。

玩自媒体就是在找存在感

mikel阅读(865)

每天写日志,刷微博,刷朋友圈,都是为了啥?

美其名曰:自媒体

其实就是刷存在感,让自己觉得自己在互联网上还算个“角儿”

有点儿类游戏虚拟世界里面真金白银就为穿上身极品装备一样,人就是这么点儿追求

每天不发点儿啥,总觉得空唠唠的,咋没啥意思呢

就像那么多个人开发者一样,都有那么个把想法做成APP的梦,发布出来让自己觉得自己还是那么回事儿

不管是像我这样写得差的,也出来刷日志,也就那么点儿追求,给自己每天留点儿啥,

不至于虚度光阴,给自己找个乐子

有一种产品叫我的产品

mikel阅读(932)

自己要卖产品之前,就应该对自己卖的产品全面了解,要不然你怎么知道你的产品的缺点和优点,哪些客户适合,哪些客户不适合

自己都不了解自己的产品,还好意思说:我的产品怎么怎么样

既然要做就踏踏实实做的专业点,自己先用用

半夜爬起来写日志的确有点儿蛇精病,为啥? 总感觉不写日志 像缺点儿啥似的

今天头一次有人评价我:太邪了

我自省了半天,发现自己确实亦正亦邪,跟黄老邪差不多 ,因为接触的东西太杂了,好的坏地什么招式都略懂,结果变得这么邪不邪正不正的。

自省了半天,君子爱财取之以道,世界上的钱是赚不完的,更何况钱财乃身外之物

亦正亦邪不如正大光明

[转载]两款 REST 测试工具 - Ganiks - 博客园

mikel阅读(1189)

[转载]两款 REST 测试工具 – Ganiks – 博客园.

用CURL命令行测试REST API 无疑是低效率的,这里把最近使用的两款 Chrome 插件总结下

  • POSTMAN
    • 简单易用
  • REST Console
    • 功能强大

使用的话用POSTMAN就够用了,但是我更喜欢 REST Console ,因为她的功能非常强大和全面,一下子就能让你搞清楚你在做的事情,你用不到的功能也可以帮助你更加了解 REST, http请求的过程。

下面是两个的截图界面

1. POSTMAN 测试工具

1. Authorization

  • Basic Auth
  • Digest Auth
  • OAuth 1.0

2. REQUEST METHOD

GET, PUT, POST, PATCH, DELETE, LINK, UNLINK, COPY, HEAD, OPTIONS, PURGE

3. Request Headers

Content-Type:

  • form-data
  • x-www-form-urlencoded
  • raw
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryVQuD0ghtRqDehBQH
Request Payload:

------WebKitFormBoundaryVQuD0ghtRqDehBQH
Content-Disposition: form-data; name="image"

dddddd
------WebKitFormBoundaryVQuD0ghtRqDehBQH--
Content-Type:application/x-www-form-urlencoded

Form Data:
image:bbbbbbb
Content-Type:text/plain;charset=UTF-8
Request Payload:

image=aaaaaaaaaaaaaa

这3种方法其中 form-data 是不支持 PUT 方法的。而用REST Console中的 Content-Type:multpart/form-data 是支持 PUT 方法的。不知道是不是bug

4. Response Body

支持3种展示方式, 以及常用的XML和JSON格式。

  • Pretty
  • Raw
  • Preview
  • JSON/XML

5. Response Header

Connection →
Connection
Options that are desired for the connection

Keep-Alive
Content-Length →93
Content-Type →application/json; charset=UTF-8
Date →Fri, 01 Aug 2014 05:41:56 GMT
Keep-Alive →timeout=5, max=100
Server →Apache/2.2.9 (Win32) PHP/5.4.30 mod_fcgid/2.3.6
X-Powered-By →PHP/5.4.30

2. REST Console 测试工具

1. Options

软件相关设置,配色,主题,高亮设置等(说明这个东东功能比较全面)

特别说下一个选项就是 Help Lines, 开启这个选项,对着 REST Console的每一个选项,就很容易搞清楚 http 的 请求和响应中的每一个项目是怎么回事

原创文章,转载请注明 : http://www.cnblogs.com/ganiks/

2. Target

设置下面内容:

  • Target
    • Request URI : 这个是请求的 URI
    • Request Method : PUT POST …
    • Request Timeout
  • Accept
    • Accept: (注意区分这个type和后面的content-type)
      • */*(一般都是这个选项)
      • application/atom+xml
      • test/plain
      • application/JavaScript
      • application/json
      • application/http
      • application/pdf
      • application/rar
      • … …
    • Acceptable Language

3. Body

  • Content Headers
    • Content-Type: mime type of the request body(跟PUT和POST方法配合使用)
      • application/x-www-form-urlencoded
      • text/plain
      • multipart/form-data
      • 这3种是在 POSTMAN中支持的3种,但其实有很多很多种,在 REST Console 中的输入框中输入几个字母,会自动匹配库中的很多选项
    • Acceptable Encoding: 比如 utf-8(参考 HTTP compression)
    • Content-MD5: 比如 Q2hlY2sgSW50ZWdyaXR5IQ==
  • Request Payload
    • RAW BODY: image=ccccccccc
    • Request Params: key=>value
    • Attachements: upload files
  • Custom Headers
    • Request Parameters

对照个例子:

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
Authorization:Basic MTAwLXRva2VuOg==
Cache-Control:no-cache
Connection:keep-alive
Content-Length:20
Content-Type:text/plain;charset=UTF-8
Host:192.168.4.126
Origin:chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36

4. Authorization

  • Basic Auth
  • Setup oAuth
  • Refresh oAuth

5. Headers

  • Headers
    • Max-Forwards: 10 (限制消息可以穿破 的代理和网关的层数)
    • Range
    • From: (发送消息者的邮件地址)
    • Warning
    • Pragma
  • Cache (内容太多了)
  • Common non-standard request headers

6. Response

  • Response Body: 支持 JSON XML HTML CSS 等高亮格式
    {
        "id": "162",
        "image": "cccccccc",
        "link": "dd2",
        "show_date": "0000-00-00",
        "state": 1,
        "show_order": 0
    }
  • RAW Body
    {"id":"162","image":"cccccccc","link":"dd2","show_date":"0000-00-00","state":1,"show_order":0}
  • Response Headers
    Status Code: 200
    Date: Fri, 01 Aug 2014 06:39:00 GMT
    Server: Apache/2.2.9 (Win32) PHP/5.4.30 mod_fcgid/2.3.6
    Connection: Keep-Alive
    X-Powered-By: PHP/5.4.30
    Content-Length: 94
    Keep-Alive: timeout=5, max=100
    Content-Type: application/json; charset=UTF-8
  • Response Preview
  • Request Body
    Request Url: http://192.168.4.126/news/162
    Request Method: PUT
    Status Code: 200
    Params: {}
  • Request Headers
    Content-Type: multipart/form-data
    Authorization: Basic MTAwLXRva2VuOg==
    Accept: */*
    Connection: keep-alive
    Origin: chrome-extension: //rest-console-id
    User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36

3. http请求的Accept参数

上面提到了一个设置的地方, AcceptContent-Type

这两个参数很重要

前者一般如果不设置默认的是 */*, POSTMAN 和 RESTConsole 工具中默认的是 application/json,因此在不设置 Headers:Accept 参数的情况下返回的按照 json格式;
而普通的浏览器中返回的则默认是 application/xml 格式。

后者这个 type 指的是head body 内容的 类型

这就是为什么这两个参数分别被 REST Console 工具分别放在了 2. Target 3. Body 中。

在 yii 中默认支持的 rest api 格式有 xml 和 JSON, yii 会根据 请求的 head 的 Accept 参数来返回对应格式的数据。

这个参数 在chrome 中可以修改默认值吗?

[转载]android 实现分享功能两种方法 - 小飒 - 博客园

mikel阅读(1652)

[转载]android 实现分享功能两种方法 – 小飒 – 博客园.

当我想做一个智能的记事本的时候,我就在尝试自己写一组分享功能。后来才知道,原来每个社交软件中都有自己的分享接口。

这就大大减少了我们的代码量了。

第一种方法:特点–简单

package com.example.share;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

/* 创建菜单 */
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "分享");
return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
// intent.setType("text/plain"); //纯文本
/*
* 图片分享 it.setType("image/png");  //添加图片 File f = new
* File(Environment.getExternalStorageDirectory()+"/name.png");
*
* Uri uri = Uri.fromFile(f); intent.putExtra(Intent.EXTRA_STREAM,
* uri);
*/
Intent intent=new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_SUBJECT, "Share");
intent.putExtra(Intent.EXTRA_TEXT, "I have successfully share my message through my app");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent, getTitle()));
return true;
}
return false;
}
}

效果图:

这种方式仅仅是调用了系统中自带的分享功能。如果希望分享功能更加的抢到,涉及到的范围更加的广的话,那不得不说一说ShareSDK包了

 

shareSDK

ShareSDK是一种社会化分享组件,为iOS、Android、WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台。ShareSDK移动开发者服务平台由广州掌淘网络科技有限公司开发。
支持包括QQ、微信、新浪微博、腾讯微博、开心网、人人网、豆瓣、网易微博、搜狐微博、facebook、 twitter、google+等国内外40多家的主流社交平台,帮助开发者轻松实现社会化分享、登录、关注、获得用户资料、获取好友列表等主流的社会化 功能,强大的统计分析管理后台,可以实时了解用户、信息流、回流率、传播效率等数据,有效地指导移动APP的日常运营与推广,同时为APP引入更多的社会 化流量。

强大功能编辑

  1. 集成快捷,操作简单
    40多家主流社交网络,无论开发还是维护,都需要巨大的工作量才能完成,使用分享组件只需要3分钟即可集成完成,即可拥有丰富的功能和人性化的操作。
  2. 评论和赞功能
    可以直接通过第三方登录,发表评论和赞
  3. 插件稳定,安装包小
    每个开放平台的库包是独立的,开发者可根据需求添加,极大的减小APP体积,分享内容更稳定。
  4. 适配专用游戏引擎
    Cocos2d-xUnity3D;ANE;Jave Script的专用游戏引擎社会化分享
  5. 社会化统计分析
    标准、专业的统计分析后台,实时了解SNS、用户、信息流、转化率、传播效应等基本数据,新增自定义短链、“评论和赞”板块,有效指导日常运营与推广。并于2014年3月,发布了“2013年全年社会化媒体分享行业报告”。

2支持cocos2d游戏引擎

ShareSDK的cocos2d专用分享组件基于cocos2d游戏引擎平台优化推出的,支持iOS和Android双平台,高度自定义的界面,集成简单便捷。[1]

3支持Unity3d游戏引擎

ShareSDK的Unity3D专用分享组件针对于Unity3D工具推出的,支持iOS和Android双平台,依托社交媒体带来优质的免费游戏用户。[2]

4发展历程

2013年1月16日 ShareSDK for iOS正式发布。
2013年3月18日 ShareSDK for Android版正式发布。
2013年8月ShareSDK APP开发者用户已超1万。[3]
2013年12月19日ShareSDK for cocos2d-x 2.2.0专用组件正式发布
2013年12月27日新增评论和赞模块
2014年2月20日ShareSDK for Unity3d正式发布
2014年3月10日ShareSDK for ANE正式发布
2014年3月22日ShareSDK for Jave Script正式发布
摘自:http://baike.baidu.com/view/9915538.htm?fr=aladdin
关于游戏中使用的ShareSDK分享:http://www.unitymanual.com/thread-12434-1-1.html
第二种方法:特点–全面
在SHARESDK官网中下载 shareSDK for android 功能开发包
http://share.sharesdk.cn/Download
1.到官网上下载最新版本的ShareSDK并解压
2.进入ShareSDK解压目录,打开“Share SDK for Android”目录,可以找到“QuickIntegrater.jar”,这个就是快速集成ShareSDK的工具
像我这样解压出来自动就是压缩包的形式,不能直接打开。所以要通过命令行打开。
3.生成一个Sample的文件夹,将文件夹中的内容复制到项目中去。就ok了。
4.复制到项目中是一定要保证编码的问题。最好是用UTF-8的编码,这样就不会报错了。
效果图: