示例#1
0
public class BaiduPushUtil {
  private static Integer deployStatus =
      ConfigPropertieUtils.getInteger("media.push.baidu.ios.deploystatus", 2);

  public static String getUnsignedParameterMapString(
      PushParam param, Map<String, Object> pushMessage) {

    Map<String, String> parameters = new TreeMap<String, String>();
    parameters.put("method", "push_msg");
    // 访问令牌
    parameters.put("apikey", param.getApiKey());
    // 推送类型,取值范围为:1~3
    // 1:单个人,必须指定user_id 和 channel_id (指定用户的指定设备)或者user_id(指定用户的所有设备)
    // 2:一群人,必须指定 tag
    // 3:所有人,无需指定tag、user_id、channel_id
    parameters.put("push_type", param.getPushType() + "");
    // 设备类型
    // 1:浏览器设备;
    // 2:PC设备;
    // 3:Android设备;
    // 4:iOS设备;
    // 5:Windows Phone设备;
    parameters.put("device_type", param.getDeviceType() + "");

    // 推送类型,取值范围为:1~3
    // 1:单个人,必须指定user_id 和 channel_id (指定用户的指定设备)或者user_id(指定用户的所有设备)
    // 2:一群人,必须指定 tag
    // 3:所有人,无需指定tag、user_id、channel_id
    if (param.getPushType() == 1) {
      parameters.put("user_id", param.getUserId());
      parameters.put("channel_id", param.getChannelId());
    }

    // 消息类型
    // 0:消息(透传给应用的消息体)
    // 1:通知(对应设备上的消息通知)
    // 默认值为0。
    int message_type = param.getMessageType();
    parameters.put("message_type", message_type + "");
    parameters.put("messages", JSON.toJSONString(pushMessage));

    // 消息标识。
    // 指定消息标识,必须和messages一一对应。相同消息标识的消息会自动覆盖。
    String msg_keys = UUID.randomUUID().toString();
    parameters.put("msg_keys", msg_keys);
    parameters.put("secret", param.getSecret());
    // IOS 用的 1开发环境 2 线上环境
    parameters.put("deploy_status", deployStatus + "");

    return JSON.toJSONString(parameters);
  }

  /**
   * MD5加密
   *
   * @param s
   * @return
   */
  private static String MD5(String s) {
    char hexDigits[] = {
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
    };
    try {
      byte[] strTemp = s.getBytes();
      MessageDigest mdTemp = MessageDigest.getInstance("MD5");
      mdTemp.update(strTemp);
      byte[] md = mdTemp.digest();
      int j = md.length;
      char str[] = new char[j * 2];
      int k = 0;
      for (int i = 0; i < j; i++) {
        byte byte0 = md[i];
        str[k++] = hexDigits[byte0 >>> 4 & 0xf];
        str[k++] = hexDigits[byte0 & 0xf];
      }
      return new String(str);
    } catch (Exception e) {
      return null;
    }
  }

  /**
   * Map排序
   *
   * @param unsort_map
   * @return
   */
  private static SortedMap<String, String> mapSortByKey(Map<String, String> unsort_map) {
    TreeMap<String, String> result = new TreeMap<String, String>();
    Object[] unsort_key = unsort_map.keySet().toArray();
    Arrays.sort(unsort_key);
    for (int i = 0; i < unsort_key.length; i++) {
      result.put(unsort_key[i].toString(), unsort_map.get(unsort_key[i]));
    }
    return result.tailMap(result.firstKey());
  }

  /**
   * 获取签名
   *
   * @param url
   * @param parameters
   * @param secret
   * @return
   */
  private static String getSignature(String url, Map<String, String> parameters, String secret) {
    // 先将参数以其参数名的字典序升序进行排序
    Map<String, String> sortedParams = new HashMap<String, String>(parameters);
    sortedParams = mapSortByKey(sortedParams);
    // 遍历排序后的字典,将所有参数按"key=value"格式拼接在一起
    StringBuilder baseString = new StringBuilder();
    baseString.append("POST");
    baseString.append(url);
    for (String key : sortedParams.keySet()) {
      if (null != key && !"".equals(key)) {
        baseString.append(key).append("=").append(sortedParams.get(key));
      }
      sortedParams.get(key);
    }
    baseString.append(secret);

    String encodeString = URLEncoder.encode(baseString.toString());
    String sign = MD5(encodeString);
    return sign;
  }
}
/**
 * 电子书封面URL.
 *
 * @author maqiang
 */
public final class MediaCoverPicUrlUtil {
  /** 图片尺寸代号. */
  private enum ImageSizeCode {
    d,
    h,
    k
  }

  /** 图片尺寸:186X248 */
  public static final MediaCoverPicUrlUtil D = getInstance(ImageSizeCode.d);

  /** 168X224 */
  public static final MediaCoverPicUrlUtil H = getInstance(ImageSizeCode.h);

  /** 图片尺寸:132X176 */
  public static final MediaCoverPicUrlUtil K = getInstance(ImageSizeCode.k);

  /**
   * img{idc}{product_id%10}.ddimg.cn/imgother10/{product_id%99}/{product_id%
   * 37}/{product_id}_cover_{size}_epub.jpg.
   */
  private static final String EBOOK_IMAGE_URL_TEMPLATE =
      "http://%s/imgother10/%s/%s/%s_cover_%s_media.jpg"; // ConfigReader.get("ebook.image.url",
  // "");
  /** epub template */
  private static final String EBOOK_IMAGE_URL_FOR_EPUB_TEMPLATE =
      "http://%s/imgother10/%s/%s/%s_cover_%s_epub.jpg";

  private static final String EBOOK_IMAGE_SERVERNO =
      ConfigPropertieUtils.getString("media.cdn.serverno");

  private static final String EBOOK_IMAGE_VERSION =
      ConfigPropertieUtils.getString("media.cdn.version");
  private static final String EBOOK_IMAGE_URL_TEST =
      "10.255.242.6:8300"; // ConfigReader.get("ebook.image.url.test");

  private ImageSizeCode imgSizeCode;

  // http://10.255.242.6:8300/imgother10/28/17/1900046143_cover_a_epub.jpg
  public String getUrl(long productId, String serverNo) {
    /*
     * 组装url模板为最终访问url http://%s/imgother10/%s/%s/%s_cover_%s_epub.jpg
     */
    // 测试环境用
    if (serverNo == null || serverNo.length() == 0) {
      return String.format(
          EBOOK_IMAGE_URL_TEMPLATE,
          EBOOK_IMAGE_URL_TEST,
          productId % 99,
          productId % 37,
          productId,
          imgSizeCode);
    }
    // 正式环境用
    return String.format(
        EBOOK_IMAGE_URL_TEMPLATE,
        "img" + serverNo + (productId % 10) + ".ddimg.cn",
        productId % 99,
        productId % 37,
        productId,
        imgSizeCode);
  }

  public String getUrl(long productId) {
    return getUrl(productId, EBOOK_IMAGE_SERVERNO);
  }

  public String getEpubUrl(long productId, String serverNo) {
    /*
     * 组装url模板为最终访问url http://%s/imgother10/%s/%s/%s_cover_%s_epub.jpg
     */
    // 测试环境用
    if (serverNo == null || serverNo.length() == 0) {
      return String.format(
          EBOOK_IMAGE_URL_FOR_EPUB_TEMPLATE,
          EBOOK_IMAGE_URL_TEST,
          productId % 99,
          productId % 37,
          productId,
          imgSizeCode);
    }
    // 正式环境用
    return String.format(
        EBOOK_IMAGE_URL_FOR_EPUB_TEMPLATE,
        "img" + serverNo + (productId % 10) + ".ddimg.cn",
        productId % 99,
        productId % 37,
        productId,
        imgSizeCode);
  }

  public String getEpubUrl(long productId) {
    return getEpubUrl(productId, EBOOK_IMAGE_SERVERNO);
  }

  private MediaCoverPicUrlUtil(ImageSizeCode imgSizeCode) {
    this.imgSizeCode = imgSizeCode;
  }

  private static final MediaCoverPicUrlUtil mcpuH = new MediaCoverPicUrlUtil(ImageSizeCode.h);

  public static String getMediaCoverPic(long productId) {
    String url = mcpuH.getUrl(productId);
    return url + "?version=" + EBOOK_IMAGE_VERSION;
  }

  private static MediaCoverPicUrlUtil getInstance(ImageSizeCode imgSizeCode) {

    return new MediaCoverPicUrlUtil(imgSizeCode);
  }

  public static void main(String[] args) {
    System.out.println(new MediaCoverPicUrlUtil(ImageSizeCode.h).getUrl(1960008714L));
  }
}